Hallo,
so also so sieht die xsl jetzt aus:
Da sind schon mal eine Menge Fehler drinn, wenn ich dieses XSLT auf dein gepostetes XML beziehen. In den XMLs steht <person> im XSLT greifst du auf "/Person" zu.
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/><xsl:template match="/">
<xsl:element name="Person">
<xsl:for-each select="/root/Person">
<xsl:for-each select="root/person">
(du bist bereits im "/" das ist also vor <root> nicht mehr nötig)
<xsl:call-template name="format"/>
</xsl:for-each>
</xsl:element>
</xsl:template><xsl:template name="format">
xsl:choose
<xsl:when test="document('test.xml')//Person[@name = current()/ancestor::person/@name]"/>
<xsl:when test="document('test.xml')/root/person[@name = current()/@name]"></xsl:when>
Es ist kein guter Stil für when das "es soll nichts passieren" zu definieren. Dafür ist explizit otherwise gedacht, da der ja auch nur optional ist.
xsl:otherwise
<xsl:call-template name="erstellung"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="erstellung">
xsl:copy
<xsl:copy-of select="*"/>
</xsl:copy>
Und was soll das bewirken? außer einer:
<person>
<strasse>blablabla</strasse>
</person>
Wenn dann:
<xsl:template name="erstellung">
<xsl:copy-of select="."/>
</xsl:template>
---------------------------
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:element name="Person">
<xsl:for-each select="root/person">
<xsl:call-template name="format"/>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template name="format">
<xsl:choose>
<xsl:when test="document('person2.xml')/root/person[@name = current()/@name]">
<nix />
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="erstellung"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="erstellung">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
Ergebnis ausgehend von deinen XMLs
<?xml version="1.0" encoding="UTF-8"?>
<Person>
<nix/>
<person name="hugo">
<strasse>musterallee23</strasse>
</person>
</Person>
Und eigentlich könnte man das ganze Gedönse noch etwas reduzieren:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:element name="Person">
<xsl:for-each select="root/person[not(@name = document('person2.xml')/root//person/@name)]">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Grüße
Thomas