Übereinstimmenden child-Elemente in XSL

Dachte ich, sah ich einen Fehler in einer Antwort auf diese Frage, und zeigte es. Mir wurde gesagt, ich war falsch, und meine Antwort wurde später gelöscht.

Dennoch sehe ich nicht, wie ich falsch war. Deshalb bin ich hier veröffentlichen und hoffe jemand kann erklären, mein Missverständnis zu mir.

Die Antwort, die ich beantwortet erklärt, die Verwendung von apply-templates. Es enthielt die folgenden XML-und XSL beschreibt, wie die Vorlagen übereinstimmen würde:

<!-- sample XML snippet -->
<xml>
  <foo /><bar /><baz />
</xml>

<!-- sample XSLT snippet -->
<xsl:template match="xml">
  <xsl:apply-templates select="*" /> <!-- three nodes selected here -->
</xsl:template>

<xsl:template match="foo"> <!-- will be called once -->
  <xsl:text>foo element encountered</xsl:text>
</xsl:template>

<xsl:template match="xml/*"> <!-- will be called twice -->
  <xsl:text>other element countered</xsl:text>
</xsl:template>

Mein Kommentar war, dass die Letzte Vorlage sein sollte:

<xsl:template match="*"> <!-- will be called twice -->
  <xsl:text>other element countered</xsl:text>
</xsl:template>

weil der aktuelle Knoten bereits <xml>

Mir wurde gesagt:

Nein, xml/* ist ein Muster, das entspricht untergeordneten Elemente eines Elements mit
die Namen xml.

Prüfung der ursprüngliche Antwort

Jedoch mit dieser XML:

<xml>
  <foo /><bar /><baz />
</xml>

Und das XSL-stylesheet (ausfüllen der snippet oben):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>

<xsl:template match="xml">
  <xsl:apply-templates select="*" /> <!-- three nodes selected here -->
</xsl:template>

<xsl:template match="foo"> <!-- will be called once -->
  <xsl:text>foo element encountered.&#xa;</xsl:text>
</xsl:template>

<xsl:template match="xml/*"> <!-- will be called twice -->
  <xsl:text>other element countered.&#xa;</xsl:text>
</xsl:template>

</xsl:stylesheet>

Bekomme ich:

other element countered.
other element countered.
other element countered.

Meine Prüfung 'korrigierte' version

Wenn ich ersetzen Sie die Letzte Vorlage mit:

<xsl:template match="*"> <!-- will be called twice -->
  <xsl:text>other element countered.&#xa;</xsl:text>
</xsl:template>

als pro meine Antwort, die ich bekomme:

foo element encountered.
other element countered.
other element countered.

denen erscheinen würde, um korrekt zu sein.

Ich hoffe, dass meine Frage nicht zu brechen alle Richtlinien, aber ich kann nicht sehen, dass ich falsch bin und bin in der Hoffnung, jemand kann es erklären, mehr voll.

PS. Ich fürchte, dass meine ursprüngliche Antwort auf der anderen Frage wurde geschrieben als Antwort, kein Kommentar, wie ich habe nicht genug Punkte, um Kommentare zu schreiben noch. Ich war nicht sicher, was das beste, was zu tun war...

  • Vielen Dank für die Feststellung, dass die dummen Fehler von mir, es ist jetzt behoben in dem anderen thread. Das ging unbemerkt von allen anderen, schaute sich die Antwort im Laufe der Jahre.
InformationsquelleAutor Ben L | 2013-04-07
Schreibe einen Kommentar