/ / XSLT inclure et documenter ('') collision - xml, xslt, document

XSLT include et document ('') collision - xml, xslt, document

J'ai deux fichier XSLT UNE.xslt et B.xslt, où UNE.xslt comprend B.xslt.

UNE.xslt

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my_namespace">

<my:data>This is A.xslt</my:data>

<xsl:include href="B.xslt"/>

<xsl:template name="my_template">
<xsl:value-of select="$remote-data"/>
</xsl:template>

</xsl:stylesheet>

B.xslt

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my_namespace">

<xsl:variable name="remote-data"
select="document("")/*/my:data" />

</xsl:stylesheet>

Bien sur quand mon_modèle est évalué, une ligne vide est sortie. Cela se produit parce que B.xslt ne peut pas contenir mes données conteneur et document("") l'appel est traité avant d'inclure.

Ma question est: comment puis-je accéder mes données de B.xslt (Make document("") à traiter après l'inclusion)?

Toutes les idées sont appréciées!

Mettre à jour: Dans la vraie vie, j'ai plusieurs fichiers comme UNE.xslt: A1.xslt, A2.xslt, ... et il est donc nécessaire de faire exactement les mêmes calculs avec nodeset (comme dans $remote-data définition) mais avec des paramètres différents (stockés dans mes données).

On peut dire que je peux utiliser un modèle nommé pour cela. Mais autant que je sache, il n’est pas possible de le faire, car template renverrait RTF, ce que je dois node-set() qui n'est généralement pas disponible dans les analyseurs XSLT 1.0.

J'espère que cela clarifie mon problème.

Réponses:

0 pour la réponse № 1

le document() La fonction appelée avec un chemin vide référencera le document XML source du XSLT dans lequel le bloc de code "demeure". Dans ce cas, il B.xslt.

Si vous voulez charger / référencer XML depuis A.xsltpuis changez votre ligne en:

<xsl:variable name="remote-data"
select="document("A.xslt")/*/my:data" />

0 pour la réponse № 2

Il y a deux possibilités:

.1. Comme déjà recommandé par @ Mads-Hansen, utilisez:

<xsl:variable name="remote-data"
select="document("A.xslt")/*/my:data" />

.2. Déplacez la définition du $remote-data variable dans A.xslt:

<xsl:variable name="remote-data"
select="document("")/*/my:data" />

Ensuite, il peut être consulté par le code de B.xslt, car défini globalement <xsl:variable> s sont accessibles dans tous les modules de feuille de style inclus ou importés.