Wie kann xsl:apply-templates nur mit Vorlagen übereinstimmen, die ich definiert habe?

es gibt irgendwie rekursiv den Text aller Knoten darunter aus. Ich möchte nur, dass es rekursiv mit jeder Vorlage übereinstimmt, die ich definiert habe. Wie mache ich das?

<xsl:apply-templates/>

Ich habe mehrere Vorlagen, die verschiedenen Knoten in einem XML-Dokument entsprechen. Wenn ich nur ein

Antwort auf "Wie kann xsl:apply-templates nur mit Vorlagen übereinstimmen, die ich definiert habe? " 3 von antworten

Sie könnten einen Modus festlegen, um nur Ihre eigenen Vorlagen anzuwenden:

<xsl:template match="* | /" >
    <xsl:apply-templates mode="myMode" />
</xsl:template>

<xsl:template match="somenode" mode="myMode">
  <!-- do something here -->
</xsl:template>

Eine andere Option wäre, die integrierten Vorlagenregeln zu überschreiben (siehe z.B. http://unix.com.ua/orelly/xml/xmlnut/ch08_07.htm) )

eine explizite Vorlage für dieses Element, dann wird sein Inhalt verarbeitet und irgendwann landet man mit dem Text Vorlagen für ein Element, haben aber keine ein paar eingebaute Vorlagen, die das das Element enthält.

Lesen Sie die vollständige Erklärung hier: http://www.dpawson.co.uk/xsl/sect2/defaultrule.html

Sie können die Standardvorlagen für Textknoten überschreiben, indem Sie Ihre eigene Vorlage definieren und nichts tun lassen.

<xsl:template match="text()" />
Z. ::

  • , wenn Sie Vorlagen auf ein Element anwenden, die untergeordneten Elemente
  • verarbeiten, wenn Sie Vorlagen auf einen Textknoten anwenden, geben Sie den Wert

Zusammen an, d. h. wenn Sie

Dies geschieht wegen der integrierte Vorlagen in XSLT. XSLT hat eine

"

--- Ende der XSLT Spec Zitat ---

Also, wenn der Autor die volle Kontrolle über die XSLT-Verarbeitung haben will, sollten sie alle eingebauten Vorlagen überschreiben.

Wenn wir beispielsweise nicht möchten, dass text() nodes to be copied to the output, we can cause them to be ignored by overriding the built-in template in the following way: Knoten in die Ausgabe kopiert werden, können wir dazu führen, dass sie ignoriert werden, indem wir die integrierte Vorlage wie folgt überschreiben:

     <xsl:template match="text()" />

Dies ist wahrscheinlich das häufigste Problem, das selbst erfahrene XSLT-Programmierer erleben.

Das beobachtete Verhalten ist genau das Verhalten eines XSLT-kompatiblen Prozessors.

Berücksichtigen Sie:

     <xsl:apply-templates/>

ist eine Abkürzung für:

     <xsl:apply-templates select="child::node()"/>

und die Existenz der eingebauten Vorlagenregeln . Gemäß XSLT 1.0 Spec.: .:

5.8 Built-in Template Rules

Es gibt eine integrierte Vorlagenregel, damit die rekursive Verarbeitung fortgesetzt werden kann, wenn keine erfolgreiche Musterübereinstimmung durch eine explizite Vorlagenregel im Stylesheet vorhanden ist. Diese Vorlagenregel gilt sowohl für Elementknoten als auch für den Stammknoten. Das folgende zeigt das Äquivalent der integrierten Vorlagenregel:

<xsl:template match="*|/">
  <xsl:apply-templates/>
</xsl:template>

Es gibt auch eine integrierte Vorlagenregel für jeden Modus, die es ermöglicht, dass die rekursive Verarbeitung im gleichen Modus fortgesetzt wird, wenn keine erfolgreiche Musterübereinstimmung durch eine explizite Vorlageregel im Stylesheet vorhanden ist. Diese Vorlagenregel gilt sowohl für Elementknoten als auch für den Stammknoten. Im Folgenden wird das Äquivalent der integrierten Vorlagenregel für Modus m angezeigt.

<xsl:template match="*|/" mode="m">
  <xsl:apply-templates mode="m"/>
</xsl:template>

Es gibt auch eine integrierte Vorlagenregel für Text- und Attributknoten, die Text durchkopiert:

<xsl:template match="text()|@*">
  <xsl:value-of select="."/>
</xsl:template>

Die integrierte Vorlagenregel für die Verarbeitung von Anweisungen und Kommentaren soll nichts tun.

<xsl:template match="processing-instruction()|comment()"/>

Die integrierte Vorlagenregel für Namespaceknoten soll ebenfalls nichts tun. Es gibt kein Muster, das mit einem Namespaceknoten übereinstimmen kann. Daher ist die integrierte Vorlagenregel die einzige Vorlagenregel, die für Namespaceknoten angewendet wird.

Die integrierten Vorlagenregeln werden so behandelt, als ob sie implizit vor dem Stylesheet importiert wurden und daher eine niedrigere Importpriorität als alle anderen Vorlagenregeln haben. Somit kann der Autor eine integrierte Vorlagenregel überschreiben, indem er eine explizite Vorlagenregel einschließt.