J'ai essayé de sous-chaîne des données avec guillemets simples dans XSLT:
String : DataFromXML:'12345'
résultat attendu: 12345
<xsl:value-of select="substring-after('$datafromxml','DataFromXML:')"/>
Résultat: '12345'
j'ai essayé ci-dessous le code
<xsl:value-of select="substring-after('$datafromxml','DataFromXML:'')"/>
<xsl:value-of select="substring-after('$datafromxml','DataFromXML:'')"/>
<xsl:value-of select="substring-after('$datafromxml','DataFromXML:'')"/>
Erreur:
String literal was not closed 'DataFromXML:'--->'<---
Les règles générales pour s'échapper sont les suivantes:
En 1.0:
"
ou '
En 2.0:
"
ou '
L'utilisation d'une variable $ quot ou $ apos comme indiqué par Vitaliy peut rendre le code beaucoup plus clair.
Cela devrait fonctionner:
<xsl:variable name="apos">'</xsl:variable>
...
<xsl:value-of select="substring-before(substring-after($datafromxml, concat('DataFromXML:', $apos)), $apos)" />
Vous pouvez essayer d’échanger et "et" dans votre xsl: value-of
<xsl:value-of select='substring-before
(substring-after($datafromxml,"DataFromXML:'"), "'")'/>
Vous pouvez également utiliser la fonction de traduction pour supprimer les apostrophes embêtants.
<xsl:value-of select='translate
(substring-after($datafromxml,"DataFromXML:"), "'", "")'/>
Pas nécessairement plus agréable, mais cela supprime le besoin d'une variable.
Même dans le cas le plus compliqué - la chaîne contient à la fois une citation et une apostrophe - le nombre peut être extrait sans recourir à des variables .
Supposons que nous ayons ce document XML:
<t>' "12345' "</t>
et veulent extraire juste le nombre.
Dans la transformation suivante, nous utilisons une seule expression XPath pour faire exactement cela:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="text()">
<xsl:value-of select=
'substring-after(.,"'")
'/>
==============
<xsl:value-of select=
'substring-before(
substring-after(substring-after(.,"'"), '"'),
"'"
)
'/>
</xsl:template>
</xsl:stylesheet>
Le résultat est :
"12345' "
==============
12345
Note : J'ai intentionnellement deux expressions XPath - le but de la première est de simplifier la compréhension de ce qui est exprimé dans la seconde expression XPath. Ne laisser que le dernier xsl:value-of
dans le corps du modèle produit exactement le résultat souhaité:
12345
Juste une note à mon futur moi (ou à toute autre personne) qui bénéficierait d'un rappel de la syntaxe exacte qui a fonctionné pour moi .
Déclarer cette variable
<xsl:variable name="apos" select='"'"'/>
Et utilisez-le dans un état comme celui-ci
<xsl:if test="$value = concat('G-2', $apos, 'd')">89594</xsl:if>