2009-10-02 11 views
8

J'ai deux fichiers xml. J'ai besoin de les fusionner ensemble où l'élément "myid" correspond entre les deux. S'il vous plaît jeter un oeil à ces fichiers par exemple ...XSLT: Un moyen simple de fusionner des fichiers xml

File1.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <data> 
    <title>Title1</title> 
    <description>Description1</description> 
    <myid>1</myid> 
    </data> 

    <data> 
    <title>Title2</title> 
    <description>Description2</description> 
    <myid>2</myid> 
    </data> 
</catalog> 

File2.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <data> 
    <author>Author1</author> 
    <date>12/34/5678</date> 
    <myid>1</myid> 
    </data> 

    <data> 
    <author>Author2</author> 
    <date>87/65/4321</date> 
    <myid>2</myid> 
    </data> 
</catalog> 

Le fichier résultant ressemblerait à ceci:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <data> 
    <title>Title1</title> 
    <description>Description1</description> 
    <myid>1</myid> 
    <author>Author1</author> 
    <date>12/34/5678</date> 
    </data> 

    <data> 
    <title>Title2</title> 
    <description>Description2</description> 
    <myid>2</myid> 
    <author>Author2</author> 
    <date>87/65/4321</date> 
    </data> 
</catalog> 
+0

En relation: http://stackoverflow.com/questions/1430710/two-xml-in-one-xslt –

+1

@dacracot: Les fichiers d'entrée ne sont pas bien formés non plus. -------- @ nicholas.alipaz: Est-ce qu'on voit des extraits, et pas des fichiers entiers? –

+0

J'ai mis à jour mon message. Désolé pour la confusion. –

Répondre

4

J'ai fait des recherches un peu et j'ai trouvé une question assez similaire ici: http://forums.tizag.com/showthread.php?p=76699

Voici ce que j'ai trouvé, cela semble fonctionner principalement sauf que Firefox ne le reconnaît pas comme un fichier xml même si j'ai ajouté la sortie xml:.

File1.xml (note la deuxième ligne, le référencement de notre transformation):

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="merge.xsl"?> 
<catalog> 
    <data> 
    <title>Title1</title> 
    <description>Description1</description> 
    <myid>1</myid> 
    </data> 

    <data> 
    <title>Title2</title> 
    <description>Description2</description> 
    <myid>2</myid> 
    </data> 
</catalog> 

File2.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <data> 
    <author>Author1</author> 
    <date>12/34/5678</date> 
    <myid>1</myid> 
    </data> 

    <data> 
    <author>Author2</author> 
    <date>87/65/4321</date> 
    <myid>2</myid> 
    </data> 
</catalog> 

merge.xsl:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" /> 
    <xsl:variable name="with" select="'File2.xml'" /> 

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

    <xsl:template match="scene"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
     <xsl:variable name="info" select="document($with)/catalog/data[myid=current()/myid]/." /> 
     <xsl:for-each select="$info/*"> 
     <xsl:if test="name()!='myid'"> 
      <xsl:copy-of select="." /> 
     </xsl:if> 
     </xsl:for-each> 
    </xsl:copy> 
    </xsl:template> 
</xsl:transform> 

sortie xml lors de l'affichage Fichier1.xml:

<catalog> 
    <data> 
    <title>Title1</title> 
    <description>Description1</description> 
    <myid>1</myid> 
    <author>Author1</author> 
    <date>12/34/5678</date> 
    </data> 

    <data> 
    <title>Title2</title> 
    <description>Description2</description> 
    <myid>2</myid> 
    <author>Author2</author> 
    <date>87/65/4321</date> 
    </data> 
</catalog> 
+0

404; poste n'existe plus –

+0

salut C# code s'il vous plaît pour ce – Lijo

+0

@AdamLynch désolé, j'ai cherché une version en cache de la poste, mais est venu vide. Ce n'était pas vraiment trop important puisque je décrivais tout ce qui était nécessaire ci-dessus. Meilleur! –

Questions connexes