Hallo Thomas,
vielen Dank, perfekt, tut genau das, was ich zu erreichen versucht habe. Und das mit viel weniger Zeilen.
Was ich nicht ganz nachvollziehen kann ist, wie
<xsl:template
match="@* | node()">
<xsl:copy>
<xsl:apply-templates
select="@* | node()" />
</xsl:copy>
</xsl:template>
und
<xsl:template
match="*[@revision='test' and @revisionflag='deleted']" />
interagieren.
Das | hängt alternative Ausdrücke aneinander, bedeutet also meinem Verständnis nach soviel wie 'oder'. Also in dem ersten Template "ein beliebiges Attribut" ODER "ein Element".
Das zweite Template schliesst aber alle Elemente mit der angegebenen Attributs/Werte-Kombination aus.
Wieso greift dieses zweite Template vor dem ersten?
Hat das etwas mit dem nicht explizit angegebenen, und dadurch mit Standardwerten belegten, @priority des xsl:template zu tun wie http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#template@title=hier beschrieben?
Also
<xsl:template
match="@* | node()" />
~~~ entspricht @priority=0.25 für Attribute und @priority="0" for Nodes.
~~~xml
<xsl:template
match="*[@revision='test' and @revisionflag='deleted']" />
~~~ entspricht @priority=0.25 für Nodes mit beiden Attributen/Werten
~~~xml
<xsl:template
match="@revision[.='test'] | @revisionflag[.='added']" />
~~~ entspricht @priority='0.5' für die spezifizierten Attribute.
Stimmt dies so?
Das ist genau das, was ich mit "die xsl-Denke macht mir Probleme" in meinem ersten Post gemeint habe, auf so eine Idee wäre ich nie gekommen.
Vielen Dank.
Gruß
Matthias