Bonjour,
Est-ce qu'il y a une méthode qui permet de combiner deux fichiers XML dans un seul?
Merci d'avance.
Bonjour,
Est-ce qu'il y a une méthode qui permet de combiner deux fichiers XML dans un seul?
Merci d'avance.
Ma foi, il est possible de créer un document avec XSLT, et d'aller chercher son contenu dans plusieurs autres documents avec la fonction XPath document().
Mais bon, 'faut tout faire soi-même avec ça, il y a pas de fonction toute faite.
Bonjour thelvin,
Merci pour votre réponse.
Alors:
Mon problème est la suivante :
J'ai besoin d'utiliser 2 fichiers xml dans un seul fichier xsl.
Mais au niveau de l’exécution j'execute un seul fichier xml qui ayant l'appel de ce fichier xsl.
J'attend votre réponse et merci d'avance.
Cordialement.
Zied.
Ben pour faire ça, la méthode donnée par thelvin (utilisation de la fonction document()) existe justement pour ça.
Voici un exemple concret.
Un premier fichier XML que j'ai appellé "Combine 2 XML files into 1_File1.xml" :
Un second fichier XML que j'ai appellé "Combine 2 XML files into 1_File2.xml" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version="1.0" encoding="UTF-8"?> <dataroot> <!-- This is the first of the 2 XML files --> <NumberOfEntries>3</NumberOfEntries> <TotalInv>500</TotalInv> <TotalCreditN>-100</TotalCreditN> </dataroot>
Mes deux fichiers ainsi que que le fichier XSLT sont dans le même folder.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?xml version="1.0" encoding="UTF-8"?> <dataroot2> <!-- This is the second of the 2 XML files --> <Invoice> <InvoiceNbr>21</InvoiceNbr> <InvoiceTot>300</InvoiceTot> </Invoice> <Invoice> <InvoiceNbr>22</InvoiceNbr> <InvoiceTot>-100</InvoiceTot> </Invoice> <Invoice> <InvoiceNbr>23</InvoiceNbr> <InvoiceTot>200</InvoiceTot> </Invoice> </dataroot2>
Voici le fichier XSLT que j'applique sur le premier fichier :
Vous y avez vu la commande document() qui fait appel au second fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/dataroot"> <dataroot> <xsl:copy-of select="node()"/> <xsl:apply-templates select="document('Combine 2 XML files into 1_File2.xml')/dataroot2"/> </dataroot> </xsl:template> <xsl:template match="/dataroot2/Invoice"> <xsl:apply-templates /> </xsl:template> <xsl:template match="/dataroot2"> <xsl:copy-of select="node()"/> </xsl:template> </xsl:stylesheet>
Appliquez le XSLT sur le premier fichier et vous verrez que le résultat est un fichier XML dont les premières lignes sont le fichier 1 suivies des données du fichier 2.
Il y a un peu plus simple :
Et je ne recommande pas les espaces, ni les majuscules, dans les noms de fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/*"> <!-- On s'embête pas à retaper le nom de la racine --> <xsl:copy> <xsl:copy-of select="node()"/> <xsl:copy-of select="document('Combine 2 XML files into 1_File2.xml')/*/node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
Oui, c'est nettement mieux. Super, Merci.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager