XML - Fusionner plusieurs fichiers avec XSLT

Les fichiers XML

Le premier fichier contient le chemin du fichier XSL

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Le fichier XSL -->
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
<entries>
    <entry>
        <id>1</id>
    </entry>
    <entry>
        <id>2</id>
    </entry>
    <entry>
        <id>3</id>
    </entry>
</entries>

Le deux autres fichiers : (file2.xml, file3.xml)

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entries>
    <entry>
        <id>4</id>
    </entry>
    <entry>
        <id>5</id>
    </entry>
    <entry>
        <id>6</id>
    </entry>
</entries>
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entries>
    <entry>
        <id>7</id>
    </entry>
    <entry>
        <id>8</id>
    </entry>
    <entry>
        <id>9</id>
    </entry>
</entries>

La transformation avec le fichier XSL

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />

  <!-- Importe les fichiers XML -->
  <xsl:param name="file2" select="document('file2.xml')" />
  <xsl:param name="file3" select="document('file3.xml')" />

  <!-- Selectionne les données de type entry-->
  <xsl:variable name="file2Entries" select="$file2/entries/entry" />
  <xsl:variable name="file3Entries" select="$file3/entries/entry" />

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

  <!-- Applique la transformation pour les éléments entries -->
  <xsl:template match="entries">
    <xsl:copy>
      <!-- Copie les données du premier fichier -->
      <xsl:apply-templates select="@* | node()" />
      <!-- Copie les données du deuxième fichier -->
      <xsl:apply-templates select="$file2Entries" />
      <!-- Copie les données du troisième fichier -->
      <xsl:apply-templates select="$file3Entries" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Commentaires