2009-07-13 16 views
0

J'ai un script XSLT que j'utilise pour la génération de code, dans lequel je traite plusieurs fichiers XML d'entrée, et je génère les fichiers en code Javascript. Pour chaque fichier d'entrée xml, je génère un fichier Javascript.XSLT Ajouter au document de résultat

Alors, je devrais les fichiers suivants/transformations survenant:

view1.xml -> view1.js 
view2.xml -> view2.js 
... 

Maintenant, j'ai besoin aussi de créer un fichier supplémentaire pendant le traitement XSL où je vais devoir ajouter des informations concernant chaque fichier d'entrée traité dans un fichier Javascript commun.

Donc, maintenant je l'aurais:

view1.xml -> view1.js/append to common.js 
view2.xml -> view2.js/append to common.js 
... 

Ma question est, est-il possible d'ajouter à un fichier lors du traitement des fichiers d'entrée multiples? J'utilise actuellement Saxon 9.1.0.7, et j'ai regardé l'élément xsl: result-document, mais cela semble remplacer tout le contenu précédemment écrit.

Merci.

+0

Êtes-vous à la recherche d'une solution générique ou de la bonne configuration de Saxon pour pouvoir l'ajouter? – Yuval

+0

Une configuration spécifique de Saxon serait bien si possible. – Steve

Répondre

1

Non, je ne pense pas que vous puissiez ajouter à un fichier existant (non-XML, pair) depuis XSLT. D'autre part, l'ajout d'un résultat à un fichier se fait facilement dans l'environnement qui exécute votre transformation. Qu'il s'agisse d'un langage de programmation ou d'un shell, la concaténation de fichiers texte devrait être un exercice trivial. Je vous suggère de le faire là-bas, au lieu d'essayer de trouver un moyen de plier XSLT pour le faire.

+0

Bon point. J'ai besoin d'un attribut de chaque fichier d'entrée traité, mais je pourrais facilement l'extraire en utilisant un langage de script et ajouter cette information. Merci. – Steve

+0

hmm .. J'ai manqué, n'essayez pas de résoudre un problème qui n'existe pas :-) –

0

Il existe une fonction dans XSLT "document()". Vous pouvez l'utiliser pour traiter plusieurs fichiers d'entrée XML à partir d'un seul XSLT et donc une seule sortie, je ne suis pas sûr que cela vous aide dans votre cas.

quelque chose comme.

<xsl:apply-templates select="document('doc1.xml')"/> 
<xsl:apply-templates select="document('doc2.xml')"/> 
<xsl:apply-templates select="document('doc3.xml')"/> 

<xsl:template match='nodeX">do something</xsl:template> 
<xsl:template match='nodeY">do something else</xsl:template> 
+0

Je préférerais ne pas avoir à spécifier les noms des fichiers d'entrée. Actuellement, je suis en train de traiter tous les fichiers dans un répertoire d'entrée et de fournir un répertoire de sortie pour les fichiers de transformation. Il y aura beaucoup plus de fichiers d'entrée créés, et je préférerais ne pas avoir à ajouter un élément document() pour chaque nouveau fichier d'entrée. – Steve

+0

pour cela, vous pouvez écrire un autre fichier XML à la volée (en utilisant un autre script). contenant le nom de tous les fichiers et le traiter et ajouter des balises document() dans une boucle dans XSLT. C'est le meilleur que je puisse penser à partir de maintenant. :-) –

+0

J'espère qu'il y aura un moyen plus simple, mais cela semble fonctionner si il n'y a pas d'autres options. J'utilise Ant pour la transformation, donc je pourrais simplement ajouter un appel de script dans la construction, et appeler une autre transformation. Merci – Steve