J'ai écrit un xslt qui lit certains noms de fichiers xml et fait quelques opérations sur eux. J'utilise un for-each pour les travailler un par un. J'ai chaque chemin à l'intérieur d'un paramètre $ path.
Mais maintenant, je voudrais sortir le résultat de l'application d'un externe stylesheet à ces fichiers
La solution se compose de ces ingrédients:
Utilisez la XSLT norme document()
fonction pour charger et accéder au document XML externe.
Importez la feuille de style externe à l'aide d'une instruction <xsl:import>
.
Les modèles de la feuille de style externe doivent être dans un mode spécial, non utilisé par la feuille de style principale.
A l'endroit où le résultat de la « transformation externe » est voulu, problème <xsl:apply-templates>
sélectionner les nœuds nécessaires du document externe (généralement le nœud racine /
ou l'élément supérieur /*
). Le mode spécifié sur <xsl:apply-templates>
doit être identique au mode utilisé dans la feuille de style externe.
Voici un petit exemple simplifié (importé Aucune feuille de style externe, le "document externe" est intégré dans la feuille de style, et aucun mode est utilisé):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:my="my:my"
>
<!-- <xsl:import href="myExternal.xsl"/> -->
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<my:div>
<h2>Weather</h2>
<p >It will be raining today</p>
</my:div>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="insertContents">
<xsl:apply-templates select="document('')/*/my:div/*"/>
</xsl:template>
</xsl:stylesheet>
Lorsque cette transformation est appliquée sur ce document XML:
<html>
<h1>Today's News </h1>
<insertContents/>
</html>
t il est produit désiré résultat:
<html>
<h1>Today's News </h1>
<h2 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">Weather</h2>
<p xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">It will be raining today</p>
</html>
Remarque que les namespaces étrangers ci-dessus ne sont en raison des simplifications de cet exemple - ils ne seront pas générés si le document XML externe était dans son propre fichier.
Bonne question! (+1), Voir ma réponse pour la seule solution complète en ce moment et pour un exemple de code de travail complet. :) –