xslt xsl:analyser-chaîne et de l'expression regex
J'ai un fichier xml dans lequel je dois trouver des modèles et de mettre un " marques autour de la correspondance de modèle spécifique.
<xml>
<foo>
<id>1</id>
<description>This is section 1, this is section 1 or 2, this is section 1 and 2</description>
</foo>
</xml>
Maintenant dans le fichier que j'ai pour trouver un modèle de "section 1" , "section 1 ou de la 2" et la section "1 et 2" et de mettre un " marques autour de la reconnaissance des mots.
J'ai écrit une transformation xslt qui est comme ceci:
<xsl:template match="text()">
<xsl:analyze-string select="." regex="section\s\d+|section\s\d+\s+or\s+\d|section\s\d+\s+and\s+\d">
<xsl:matching-substring>
<xsl:if test="matches(.,'section\s\d+')" >
<xsl:text>"</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:if test="matches(.,'section\s\d+\s+or\s+\d')" >
<xsl:text>"</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:if test="matches(.,'section\s\d+\s+and\s+\d')" >
<xsl:text>"</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:if>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="current()"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
Le problème, je suis confronté ici est le modèle "section 1" correspond à tous les autres modèle ainsi donc, je ne suis pas l'obtention d'un désir résultat
La transformation ci-dessus résultat est
<xml>
<foo>
<id>1</id>
<description>This is "section 1", this is "section 1" or 2, this is "section 1" and 2</description>
</foo>
</xml>
où, comme je veux cette sortie.
<xml>
<foo>
<id>1</id>
<description>This is "section 1", this is "section 1 or 2", this is "section 1 and 2"</description>
</foo>
</xml>
Toutes les idées sur la façon de mettre en œuvre... et le désir résultat.
Grâce.
Vous devez vous connecter pour publier un commentaire.
cela semble fonctionner sur votre entrée:
Bien que si vous venez de générer une chaîne de caractères non-éléments,
xsl:anayze-string
est plus que vous avez besoin et cela produit le même résultat:Un rapide mais peu élégante réponse serait de faire le test correspond à(.,'section\s\d+) et non(correspond à(.,'section\s\d+\s+ou\s+\d')) ou de certaines de ces