Zwei XML Dateien mit einem XSLT Dokument bearbeiten?
UbuntuUschi
- xsl
0 ThomasM
Hallo,
ich habe folgendes Problem:
Ich führe auf einem xml Dokument eine XSLT Transformation aus und möchte nun auf eine bestimmtes Zeichen im XML Dokument in einem zweiten XML Dokument eine Transformation durchführen.
Kann ich aus meinem aktuellen XSLT Dokument mit params auf eine zweite XML Datei zugreifen, diese verändern ohne, dass sich der andere Baum der ursprünglich angeschauten XML Datei verändert?
Oder gibt es eine Möglichkeit die Baumstruktur des zweiten XML Dokumentes in einer globalen Variable oder Parameter vorzuhalten und darin zu navigieren und den Inhalt wie ein eigenes Dokument zu ändern? Sprich mit Templates darauf zu arbeiten?
Bitte schnelle Hilfe ... Verzweiflung macht sich breit! :(
Hallo,
Oder gibt es eine Möglichkeit die Baumstruktur des zweiten XML Dokumentes in einer globalen Variable oder Parameter vorzuhalten und darin zu navigieren und den Inhalt wie ein eigenes Dokument zu ändern? Sprich mit Templates darauf zu arbeiten?
Ansatz mit xsl:document aus XSLT 2.0:
test1.xml:
<?xml version="1.0" encoding="UTF-8"?>
<test1>
<bla>1</bla>
</test1>
test2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<test2>
<blub>2</blub>
</test2>
test.xsl (auf test1.xml anwenden):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="extern">
<xsl:document>
<xsl:copy-of select="document('test2.xml')"/>
</xsl:document>
</xsl:variable>
<xsl:template match="test1">
<out>
<bla_out><xsl:value-of select="bla"/></bla_out>
<blub_out><xsl:value-of select="$extern/test2/blub"/></blub_out>
</out>
</xsl:template>
</xsl:stylesheet>
Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<out>
<bla_out>1</bla_out>
<blub_out>2</blub_out>
</out>
Soll der eingelesene externe Baum verändert ausgegeben werden, dann diese Struktur entsprechend transformieren und mittels xsl:result-document in eine Datei schreiben.
Grüße,
Thomas