Ich versuche, zwei XML-Dateien zusammenzuführen, indem ich den Wert eines Attributs abgleiche. XML-Dateien stammen von MySQL-Abfragen mit der Ausgabe '--xml'.merge xml passender Attributwert
file1.xml
<?xml version="1.0"?>
<resultset statement="SELECT" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<field name="ID_editore">20</field>
<field name="nome">Name1</field>
<field name="biografia">Bib1</field>
<field name="autoricat"></field>
</row>
<row>
<field name="ID_editore">21</field>
<field name="nome">Name2</field>
<field name="biografia">Bib2</field>
<field name="autoricat">text2</field>
</row>
</resultset>
file2.xml
<?xml version="1.0"?>
<resultset statement="SELECT" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<field name="editore_ID">20</field>
<field name="data">1929</field>
<field name="indirizzo">Address 1</field>
</row>
<row>
<field name="editore_ID">21</field>
<field name="data">1950</field>
<field name="indirizzo">Address 2</field>
</row>
</resultset>
Wunsch Merge:
<?xml version="1.0"?>
<resultset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" statement="SELECT">
<row>
<field name="ID_editore">20</field>
<field name="nome">Name1</field>
<field name="biografia">Bib1</field>
<field name="autoricat"/>
<field name="data">1929</field>
<field name="indirizzo">Address 1</field>
</row>
<row>
<field name="ID_editore">21</field>
<field name="nome">Name2</field>
<field name="biografia">Bib2</field>
<field name="autoricat">text2</field>
<field name="data">1950</field>
<field name="indirizzo">Address 2</field>
</row>
</resultset>
Mit folgendem Sheet ich das falsche Ergebnis zu bekommen, weil ich nicht weiß, wie die richtigen Attributwerte übereinstimmen:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="row">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<xsl:copy-of select="document('file2.xml')
/resultset/row/field[(@name='editore_ID')=current()[@name='ID_editore']]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Wrong Ergebnis mit über Sheet:
<?xml version="1.0"?>
<resultset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" statement="SELECT">
<row>
<field name="ID_editore">20</field>
<field name="nome">Name1</field>
<field name="biografia">Bib1</field>
<field name="autoricat"/>
<field name="data">1929</field>
<field name="indirizzo">Address 1</field>
<field name="data">1950</field>
<field name="indirizzo">Address 2</field>
</row>
<row>
<field name="ID_editore">21</field>
<field name="nome">Name2</field>
<field name="biografia">Bib2</field>
<field name="autoricat">text2</field>
<field name="data">1929</field>
<field name="indirizzo">Address 1</field>
<field name="data">1950</field>
<field name="indirizzo">Address 2</field>
</row>
</resultset>
ich diesen Befehl ausführen, um die Ausgabe
xsltproc stylesheet.xsl file1.xml
danke! es funktioniert perfekt. – brace