Ich versuche, diese XML-Beispieldatei zu verschachteln. Ich habe versucht, einfache Vorlagen zu verwenden, die den aktuellen Knoten weitergeben.XSLT: Wie nistet man Flat Code?
<?xml version="1.0" encoding="UTF-8"?>
<chapter>
<h1>h1</h1>
<p>text1</p>
<p>text2</p>
<p>text3</p>
<h2>h2</h2>
<p>text1</p>
<p>text2</p>
<p>text3</p>
<p>text4</p>
<p>text5</p>
<p>text6</p>
<h1>h1</h1>
<p>text1</p>
<p>text2</p>
<p>text3</p>
<h2>h2</h2>
<h3>h3</h3>
<p>text1</p>
<p>text2</p>
<p>text3</p>
<h2>h2</h2>
<p>text1</p>
<p>text2</p>
<p>text3</p>
</chapter>
mit folgendem Sheet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:template match="/">
<chapter>
<xsl:apply-templates/>
</chapter>
</xsl:template>
<xsl:template match="h1">
<level_1>
<head>
<xsl:value-of select="."/>
</head>
<xsl:apply-templates select="following::*"/>
</level_1>
</xsl:template>
<xsl:template match="h2">
<head>
<xsl:value-of select="."/>
</head>
<level_2>
<head>
<xsl:value-of select="."/>
</head>
<xsl:apply-templates select="following::*"/>
</level_2>
</xsl:template>
<xsl:template match="h3">
<head>
<xsl:value-of select="."/>
</head>
<level_3>
<head>
<xsl:value-of select="."/>
</head>
<xsl:apply-templates select="following::*"/>
</level_3>
</xsl:template>
<xsl:template match="p">
<text>
<xsl:value-of select="."></xsl:value-of>
</text>
</xsl:template>
</xsl:stylesheet>
Aber das Ergebnis überhaupt nicht funktioniert. following::*
funktioniert nicht, weil h1
auch folgt , also wie weiß die Vorlage, wann zu schließen?
sollte die Ausgabe sein:
<chapter>
<level_1>
<head>h1</head>
<text>text1</text>
<text>text2</text>
<text>text3</text>
<level_2>
<head>h2</head>
<text>text1</text>
<text>text2</text>
<text>text3</text>
<text>text4</text>
<text>text5</text>
<text>text6</text>
</level_2>
...
</level_1>
</chapter>
Thanks a lot!
Sie müssen sagen, ob es XSLT 1.0 oder XSLT 2.0. Die Lösung in 2.0 ist viel einfacher, weil '' verfügbar ist. Andere Fragen: (a) Gibt es eine maximale Verschachtelung oder wollen Sie mit beliebiger Tiefe umgehen? (b) Können Sie annehmen, dass die Eingabe "wohlgeformt" ist, z. nein h3 ohne h2? –
Es ist XSLT 2.0. (a) Es gibt keine maximale Verschachtelung (b) Ich kann annehmen, dass die Eingabe gut gebildet ist. – Ferestes