Frage

Ich versuche, Docbook Abschnitt Knoten zu durchqueren. Ihre Struktur ist wie folgt:

<sect1>
   <sect2>
      <sect3>
         <sect4>
            <sect5>
            </sect5>
         </sect4>
      </sect3>
   </sect2>
</sect1>

So sect1 nur innerhalb sect2 haben, werden sect2 nur haben innerhalb sect3, und so weiter. Wir können auch mehrere Unterknoten innerhalb eines Knotens haben; zum Beispiel mehr sect2 innerhalb eines sect1.

Programatically würde ich durch sie iterieren rekursiv unter Verwendung eines Zählers für die in der dem Abschnitt der Schleife ist die Verfolgung.

Dieses Mal habe ich XSLT zu verwenden und Schleife durch. Somit ist es eine Äquivalent Art und Weise, oder besserer Weg, dies in XSLT zu tun?

Edit: Ich habe bereits einen ähnlichen Code wie Willie vorgeschlagen, wo ich jede Sekte Knoten angeben (sect1 sect5). Ich suche Lösung, wo es Schleifen von selbst die Sekt Knoten zu bestimmen, und ich werde nicht Code wiederholen. Ich bin mir bewusst, dass Docbook Daten nur bis zu 5 verschachtelten Knoten ermöglicht.

War es hilfreich?

Lösung

Wenn Sie die gleiche Verarbeitung für alle Sekte tun {x} Knoten, regardles von {x}, wie Sie in einer der Kommentare sagen, dann ausreichen, um die folgende ist: :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match=
     "sect1|sect2|sect3|sect4|sect5">
      <!-- Some processing here -->
      <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

Wenn Sie wirklich auf die gleiche Art und Weise zu verarbeiten, benötigen viele weitere Elemente unterschiedliche Namen der Form „Sekte“ mit {x} (sagen wir mal x im Bereich [1, 100]), dann kann die folgenden verwendet werden:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match=
     "*[starts-with(name(), 'sect')
      and
        substring-after(name(), 'sect') >= 1
      and
        not(substring-after(name(), 'sect') > 101)
       ]">
      <!-- Some processing here -->
      <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

Andere Tipps

<xsl:template match="sect1">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="sect2">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="sect3">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="sect4">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="sect5">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top