Ich dachte, ich sah einen Fehler in einer Antwort auf this question, und wies darauf hin. Mir wurde gesagt, ich sei falsch, und meine Antwort wurde später gelöscht.Passende untergeordnete Elemente in XSL
Ich sehe immer noch nicht, wie ich falsch lag. Deshalb poste ich hier und hoffe, dass jemand mein Missverständnis erklären kann.
Die Antwort, die ich antwortete, erklärte die Verwendung von Anwenden-Vorlagen. Es enthielt die folgende XML und XSL, das beschreibt, wie die Vorlagen abgestimmt werden 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 sollte in sein:
<xsl:template match="*"> <!-- will be called twice -->
<xsl:text>other element countered</xsl:text>
</xsl:template>
weil der aktuelle Knoten bereits <xml>
wurde mir gesagt:
Nein, xml/* ist ein Muster, das Kind Elemente Spiele ein Element mit der Name xml.
Testen der ursprünglichen Antwort
jedoch mit dieser XML:
<xml>
<foo /><bar /><baz />
</xml>
Und dieses XSL-Stylesheet (Füllen der Schnipsel oben aus):
<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.
</xsl:text>
</xsl:template>
<xsl:template match="xml/*"> <!-- will be called twice -->
<xsl:text>other element countered.
</xsl:text>
</xsl:template>
</xsl:stylesheet>
ich :
other element countered.
other element countered.
other element countered.
meine 'korrigiert' Version
Wenn ich die letzte Vorlage ersetzen mit Test:
<xsl:template match="*"> <!-- will be called twice -->
<xsl:text>other element countered.
</xsl:text>
</xsl:template>
wie pro meine Antwort, die ich erhalten:
foo element encountered.
other element countered.
other element countered.
, die angezeigt werden soll sei richtig.
Ich hoffe, meine Frage bricht keine Richtlinien, aber ich kann nicht sehen, dass ich falsch liege und hoffe, dass jemand es ausführlicher erklären kann.
PS. Ich fürchte, meine ursprüngliche Antwort auf die andere Frage wurde als Antwort gepostet, nicht als Kommentar, da ich noch nicht genügend Punkte habe, um Kommentare zu schreiben. Ich war mir nicht sicher, was das Beste war ...
Danke für die Suche nach diesem dummen Fehler von mir, es ist jetzt in den anderen Thread behoben. Dies wurde von allen anderen unbemerkt, die die Antwort über die Jahre hinweg betrachteten. – Tomalak