Comment utiliser un paramètre dans un xslt en tant que XPath?
Je voudrais ajouter un élément d'un document xml et je voudrais passer en paramètre le chemin d'accès à l'élément.
sample.xml fichier:
<?xml version="1.0"?>
<stuff>
<element1>
<foo>2</foo>
<bar/>
</element1>
<element2>
<subelement/>
<bar/>
</element2>
<element1>
<foo/>
<bar/>
</element1>
</stuff>
À l'aide de:
xalan.exe -p myparam "element1" sample.xml addelement.xslt
Je voudrais le résultat suivant:
<?xml version="1.0"?>
<stuff>
<element1>
<foo>2</foo>
<bar/>
<addedElement/>
</element1>
<element2>
<subelement/>
<bar/>
</element2>
<element1>
<foo/>
<bar/>
<addedElement/>
</element1>
</stuff>
J'ai écrire addelement.xslt, lors de coder en dur le chemin, il fonctionne, mais lorsque j'essaie d'utiliser
paramètre myparam dans le match attribut-je obtenir:
XPathParserException: A node test was expected.
pattern = '$myparam/*[last()]' Remaining tokens are: ('$' 'myparam' '/' '*' '[' 'last' '(' ')' ']') (addelement.xslt, line 12, column 42)
addelement.xslt
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element1/*[last()]">
<xsl:copy-of select="."/>
<addedElement></addedElement>
</xsl:template>
</xsl:stylesheet>
addelement.xslt avec codé en dur chemin remplacé
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="myparam"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="$myparam/*[last()]">
<xsl:copy-of select="."/>
<addedElement></addedElement>
</xsl:template>
</xsl:stylesheet>
Merci pour votre aide
source d'informationauteur David
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous pouvez utiliser des variables/paramètres correspondants dans les modèles que vous avez codé. Même cela ne fonctionne pas
Au lieu de cela, essayez de changer la première correspondance de modèle comme suit, de sorte que le paramètre de contrôle est à l'intérieur du code du modèle, non pas comme une partie de la correspondance de déclaration.
Ici est de savoir comment vous pouvez le faire avec XSLT 1.0: