-1
votes

Remplacer des parties des valeurs d'attribut avec XSLT

Je veux remplacer la sous-chaîne d'une valeur d'attribut avec une autre valeur. Dans l'échantillon ci-dessous, je voudrais prendre tous les éléments avec l'attribut TAGName = "Blubb" et remplacer leur tagvalue en trouvant la chaîne "ABC" dedans, et la remplaçant avec XYZ. En outre, la chaîne "def" dans le même attribut (si existant) doit être remplacée par AAA.

Entrée d'échantillon: P>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:template match="items">
    <xsl:copy-of select="item[@type='DEVICE']/tag[@tagName='Currency' and starts-with(@tagValue,'EUR')]/.."/>
</xsl:template>
<xsl:template match="item/tag[@tagName='blubb']">
    <xsl:param name="tagValue" />
    <xsl:variable name="tagValue" select="replace($tagValue,'abc','xyz')"/>
    <xsl:variable name="tagValue" select="replace($tagValue,'def','AAA')"/>
</xsl:template>
</xsl:stylesheet>


4 commentaires

La réponse est "oui", il est possible avec XSLT. Mais comment cela se fait dépend de la version de XSLT que vous utilisez. Pouvez-vous utiliser XSLT 2.0, car cela dispose de la fonction remplacer disponible? De plus, votre sortie attendue est-elle correcte, comme dans le deuxième élément, la valeur "def" semble avoir été remplacée par "XYZ" plutôt que "" AAA ", et dans le troisième élément," DEF "n'a pas été remplacé du tout . Merci!


De plus, étant donné que Stackoverflow n'est pas un service d'écriture de code, veuillez partager votre tentative de code XSLT afin que nous puissions aider à des spécificités à votre problème.


Merci d'avoir souligné la faute de frappe dans le résultat souhaité, j'ai changé cela :) et je peux utiliser 2.0, alors j'essaie la fonction Remplacer


Tout en utilisant juste remplacer () pourrait fonctionner, il pourrait y avoir des cas où il ne le fera pas. Par exemple, si vous avez abcoulomb dans votre valeur d'attribut devient-il nécessaire de devenir xyzoulomb ou devrait-il rester inchangé?


3 Réponses :


0
votes

Vous pouvez faire référence à cet article: String XSLT Remplacer

reprendre:

  • pour XSLT 2.0:

    En utilisant la fonction Remplacer la fonction >

  • pour XSLT 1.0:

    1. Test Si la chaîne de remplacement existe ( ) )
    2. Si tel est le cas, émettez la sous-chaîne avant ( ), le mot à remplacer, la sous-chaîne après (( )).

1 commentaires

Merci, va essayer ça :)



0
votes

méfiez-vous d'utiliser un simple:

replace($value, '(^|,)abc(,|$)', '$1XYZ$2')


0 commentaires

0
votes

Vous pouvez essayer ceci - xxx

Utilisez cette Analyse-String


1 commentaires

Je dois admettre que je dois trouver une heure tranquille pour traiter pourquoi et comment cela fonctionne (et comment réappliquer ma devise commence avec un filtre EUR), mais cela vous remercie beaucoup!