Comment transformer et de fusionner plusieurs fichiers xml en un seul

J'ai besoin de votre aide pour transformer du XML à l'aide de XSLT. J'ai le code de sélection de plusieurs XMLs et en appliquant le XSLT.

Mon problème est avec le XSLT où je veux convertir ces shop1.xml shop2xml .. à allshops.xml. C'est une tâche facile pour quelqu'un qui sait comment travailler avec XSLT, car il y a seulement 2-3 changements.

Vous trouverez ci-dessous les structures pour une meilleure compréhension. Je vous remercie beaucoup.

shop1.xml

<shop>
    <products>
        <product id="189">
            <title></title>
            <description></description>
            <price></price>
            <image></image>
            <url></url>
            <category id="61"></category>
        </product>
    </products>
</shop>

shop2.xml

<shop>
    <products>    
        <product id="182">
            <title></title>
            <description></description>
            <price></price>
            <image></image>
            <url></url>
            <category id="62"></category>
        </product>
    </products>
</shop>

shop3.xml //celui-ci a directement des produits en tant que root et l'id peut-être déjà présent

<products>
    <product>
        <id>123</id>
        <title></title>
        <description></description>
        <price></price>
        <image></image>
        <url></url>
        <category id="62"></category>
    </product>    
</products>

paths.xml il est utilisé à partir du code php pour obtenir plusieurs fichiers xml

<?xml version="1.0" encoding="utf-8"?>
<files>
    <file>shop1.xml</file>
    <file>shop2.xml</file>
    <file>shop3.xml</file>
</files>

allshops.xml

<products> //removed the store,shop and products stays as root
    <product>
        <id>the product's attribute id</id> //new element, with value the product id=""
        <title></title>
        <description></description>
        <price></price>
        <image></image>
        <url></url>
        <category></category> //removed the attribute id
        <shopid></shopid> //new element, will be blank for now
    </product>
    <product>
    </product>
    .
    .
    .
</products>
Il serait préférable de charger tous les fichiers à l'aide de document() XSLT 1.0 fonction. De cette façon, vous serez en mesure de correctement inclure le contenu à l'intérieur d'un seul productsracine et également remplir le shopid avec le nom du fichier en cours.
Bonjour. Je suis vraiment intéressé par cette solution si vous êtes wklling à répondre.
Voir ma réponse. J'ai gardé la transformation générale de façon à y intégrer d'autres nœuds finalement pas inclus dans vos échantillons d'entrée. Espérons que cela aide.

OriginalL'auteur EnexoOnoma | 2011-07-26