Vergleich/Update zweier XML-Dateien mittels XSLT
puntila
- xsl
1 ThomasM
Hallo!
Ich suche mit XSLT eine Vergleich/Update-Routine.
file1:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Element id="1">
file 1 --- Inhalt 1
</Element>
<Element id="3">
file 1 --- Inhalt 3
</Element>
<Element id="4">
file 1 --- Inhalt 4
</Element>
</Root>
file2:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Element id="1">
file 2 --- Inhalt 1
</Element>
<Element id="2">
file 2 --- Inhalt 2
</Element>
</Root>
Durch XSLT erzeugter Output:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Element id="1">
file 1 --- Inhalt 1
file 2 --- Inhalt 1
</Element>
<Element id="2">
file 2 --- Inhalt 2
<flag nur-in="file2"/>
</Element>
<Element id="3">
file 1 --- Inhalt 3
<flag nur-in="file1"/>
</Element>
<Element id="4">
file 1 --- Inhalt 4
<flag nur-in="file1"/>
</Element>
</Root>
Die Frage ist: welche XSL-Datei erzeugt mittels file1 und file2 diesen Output?
Puntila
Hallo puntila,
Die Frage ist: welche XSL-Datei erzeugt mittels file1 und file2 diesen Output?
Als Ansatz zum Weiterdenken:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fn">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="file1" select="fn:doc('file1.xml')"/>
<xsl:variable name="file2" select="fn:doc('file2.xml')"/>
<Root>
<xsl:for-each-group select="$file1//Element union $file2//Element" group-by="@id">
<xsl:sort select="@id" data-type="number" order="ascending"/>
<Element id="{@id}">
<xsl:for-each select="current-group()">
<xsl:value-of select="."/>
</xsl:for-each>
</Element>
</xsl:for-each-group>
</Root>
</xsl:template>
</xsl:stylesheet>
Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Element id="1">
file 1 --- Inhalt 1
file 2 --- Inhalt 1
</Element>
<Element id="2">
file 2 --- Inhalt 2
</Element>
<Element id="3">
file 1 --- Inhalt 3
</Element>
<Element id="4">
file 1 --- Inhalt 4
</Element>
</Root>
Grüße,
Thomas