2010-06-18 4 views
2

Le nom du fichier XML est spécifique, mais j'ai besoin de créer un chemin dynamique. J'ai essayé d'utiliser une variable pour construire le chemin mais cela n'a pas fonctionné:Chemin d'accès dynamique dans la fonction document()

<xsl:variable name="path"> 
    ...conditional code 
</xsl:variable>  <xsl:value-of select="document('myXML.xml')/worksheets/$path"/> 

2.0 solutions ok.

+0

Bonne question (1). Voir ma réponse pour une explication et une solution de contournement. –

Répondre

1

L'évaluation de toute expression XPath générée dynamiquement n'est pas prise en charge par les normes XSLT 1.0 ou XSLT 2.0. Il sera pris en charge dans XSLT 2.1.

Si la technique dans cette réponse peut être utilisée avec succès expression XPath généré dynamiquement est pas trop complexe,:

Retrieving XML node from a path specified in an attribute value of another node

+1

La solution de Dimitre est très cool pour des expressions simples. J'ai également ajouté un exemple à ce sujet en utilisant la fonction dynamique d'évaluation d'EXLT, qui devrait être essentiellement la même que la solution saxon: évaluer que Max mentionne dans sa réponse: http://stackoverflow.com/questions/3015942/retrieving-xml- node-from-a-path-specified-dans-une-attribute-value-of-another-node/3017752 # answer-3017543 –

1

Vous avez besoin d'une fonction d'extension, XPath 2.0 ne prend pas en charge la compilation/évaluation dynamique. Saxon a saxon:evaluate. Même si votre processeur ne supporte pas cette fonction, vous pouvez l'implémenter vous-même en tant que fonction d'extension.

+0

Je n'arrive pas à obtenir la fonction saxon: evaluate() pour fonctionner avec une fonction document(). Je reçois une erreur statique xPath xPression. johkar

+0

@johkar: Votre expression XPath est incorrecte, vous devriez faire quelque chose comme ceci: 'saxon: évaluer (concat ('document (\' myxml.xml \ ') /', $ formPath)) ' –

+0

@johkar: Aussi, la fonction saxon: evaluate est disponible sur les éditions Professional et Enterprise. –

Questions connexes