J'essaie de parcourir un document XML en utilisant xsl: foreach mais j'ai besoin que select = "" soit dynamique, donc j'utilise une variable comme source. Voici ce que j'ai essayé:Utilisation de xsl: variable dans une instruction select xsl: foreach
...
<xsl:template name="SetDataPath">
<xsl:param name="Type" />
<xsl:variable name="Path_1">/Rating/Path1/*</xsl:variable>
<xsl:variable name="Path_2">/Rating/Path2/*</xsl:variable>
<xsl:if test="$Type='1'">
<xsl:value-of select="$Path_1"/>
</xsl:if>
<xsl:if test="$Type='2'">
<xsl:value-of select="$Path_2"/>
</xsl:if>
<xsl:template>
...
<!-- Set Data Path according to Type -->
<xsl:variable name="DataPath">
<xsl:call-template name="SetDataPath">
<xsl:with-param name="Type" select="/Rating/Type" />
</xsl:call-template>
</xsl:variable>
...
<xsl:for-each select="$DataPath">
...
Le foreach a lancé une erreur indiquant: "XslTransformException - Utiliser un fragment d'arbre de résultat dans une expression de chemin, convertissez-le d'abord en un ensemble de nœuds en utilisant la fonction msxsl: node-set(). "
Lorsque j'utilise la fonction msxsl: node-set(), mes résultats sont vides.
Je suis conscient que je mets $ DataPath à une chaîne, mais la fonction node-set() ne devrait-elle pas en créer un ensemble de nœuds? Est-ce que je manque quelque chose? Lorsque je n'utilise pas de variable:
<xsl:for-each select="/Rating/Path1/*">
Je reçois les résultats appropriés.
Voici le fichier de données XML J'utilise:
<Rating>
<Type>1</Type>
<Path1>
<sarah>
<dob>1-3-86</dob>
<user>Sarah</user>
</sarah>
<joe>
<dob>11-12-85</dob>
<user>Joe</user>
</joe>
</Path1>
<Path2>
<jeff>
<dob>11-3-84</dob>
<user>Jeff</user>
</jeff>
<shawn>
<dob>3-5-81</dob>
<user>Shawn</user>
</shawn>
</Path2>
</Rating>
Ma question est simple, comment vous exécutez un foreach sur 2 chemins différents?
Difficile à dire sans voir au moins un fragment XML. – Oded