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>
3 Réponses :
Vous pouvez faire référence à cet article: String XSLT Remplacer P>
reprendre: p>
pour XSLT 2.0: P>
En utilisant la fonction Remplacer la fonction pour XSLT 1.0: P>
Merci, va essayer ça :)
méfiez-vous d'utiliser un simple:
replace($value, '(^|,)abc(,|$)', '$1XYZ$2')
Utilisez cette
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!
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 code> 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 () code> pourrait fonctionner, il pourrait y avoir des cas où il ne le fera pas. Par exemple, si vous avez
abcoulomb code> dans votre valeur d'attribut devient-il nécessaire de devenir
xyzoulomb code> ou devrait-il rester inchangé?