2013-05-21 4 views
0

Je suis en train de fusionner plusieurs fichiers XML en un seul de la manière suivante:comprennent Dynamiquement fichiers XML en utilisant XSLT

ai dis-je un fichier XML, appelé fruit.xml:

<fruit> 
    <apples> 
     <include ref="apples.xml" /> 
    </apples> 
    <bananas> 
     <include ref="bananas.xml" /> 
    </bananas> 
    <oranges> 
     <include ref="oranges.xml" /> 
    </oranges> 
</fruit> 

et les fichiers XML suivants qui sont référencés de fruit.xml, comme par exemple apples.xml:

<fruit> 
    <apples> 
     <apple type="jonagold" color="red" /> 
     <... /> 
    </apples> 
</fruit> 

et ainsi de suite ... Je voudrais fusionner ces derniers dans 1 fichier XML, comme s UCH:

<fruit> 
    <apples> 
     <apple type="jonagold" color="red" /> 
     <... /> 
    </apples> 
    <bananas> 
     <banana type="chiquita" color="yellow" /> 
     <... /> 
    </bananas> 
    <oranges> 
     <orange type="some-orange-type" color="orange" /> 
     <... /> 
    </oranges> 
</fruit> 

Je veux déterminer les fichiers « enfant » (comme apples.xml, bananas.xml, etc.) de façon dynamique en fonction des valeurs des ref attributs dans les <include> éléments de fruits.xml puis les inclure dans la sortie.

Est-ce possible en utilisant XSLT?

Répondre

1

Si seul le composer d'un fichier doit être inclus, vous pouvez utiliser: ce

<xsl:copy-of select="document(@ref)/fruit/*/*"/> 

Par conséquent, essayez:

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

    <xsl:output indent="yes" method="xml" encoding="utf-8" omit-xml-declaration="yes" /> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="include"> 
     <xsl:copy-of select="document(@ref)/fruit/*/*"/> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Merci beaucoup, ça marche! J'essaie maintenant de le faire traiter les éléments '' dans les fichiers suivants, comme ceci: ' 'au lieu de' 'mais le résultat est' '. Des conseils? – pancake

+0

Annuler cela, déjà corrigé: J'ai supprimé l'élément '' à l'intérieur du '