2009-10-02 11 views
8

Mam dwa pliki xml. Muszę połączyć je tam, gdzie element "myid" pasuje do siebie. Proszę spojrzeć na przykładowe pliki ...XSLT: Prosty sposób na połączenie plików 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> 

Plik wynikowy będzie wyglądać następująco:

<?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

Powiązane: http://stackoverflow.com/questions/1430710/two-xml-in-one-xslt –

+1

@dacracot: Pliki wejściowe również nie są dobrze uformowane. -------- @ nicholas.alipaz: Czy widzimy fragmenty, a nie całe pliki? –

+0

Zaktualizowałem mój post. Przepraszam za zamieszanie. –

Odpowiedz

4

Trochę badałem i znalazłem tutaj dość podobne pytanie: http://forums.tizag.com/showthread.php?p=76699

Oto, co wymyśliłem, wygląda na to, że działa głównie z tym, że Firefox nie rozpoznaje go jako pliku xml, mimo że dodałem xml: output.

File1.xml (uwaga linia dwa przedstawieniu naszej transformacji):

<?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> 

xml wyjścia podczas oglądania Plik1.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; post już nie istnieje –

+0

cześć C# kod proszę na ten – Lijo

+0

@AdamLynch przepraszam, szukałem buforowanej wersji postu, ale pojawił się pusty. Nie było to zbyt ważne, ponieważ opisałem wszystko, co potrzebne powyżej. Najlepiej! –