Matthias: Fast identisches Kopieren von xml nach xml

Beitrag lesen

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