Hallo Gunnar,
Nur die
para
-Elemente mit Attributstyleclass="meineListe"
sollen zuli
werden, und das mitul
außenrum. Geht das mit XSLT überhaupt? Aus<para><text>Absatz vor der Liste</text></para> <para styleclass="meineListe"><text styleclass="meineListe">Listenpunkt 1</text></para> <para styleclass="meineListe"><text styleclass="meineListe">Listenpunkt 2</text></para> <para><text>Absatz nach der Liste</text></para>
soll werden:
<p>Absatz vor der Liste</p> <ul> <li>Listenpunkt 1</li> <li>Listenpunkt 2</li> </ul> <p>Absatz nach der Liste</p>
Ein Ansatz in XSLT 2.0:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" version="5" encoding="UTF-8"/>
<xsl:template match="root">
<html>
<head>
<meta charset="UTF-8"/>
<title>Test</title>
</head>
<body>
<xsl:for-each-group select="para" group-starting-with="para[not(@styleclass)]">
<xsl:if test="current-group()[not(@styleclass)]">
<p>
<xsl:value-of select="text"/>
</p>
</xsl:if>
<xsl:if test="count(current-group()[@styleclass]) > 0">
<ul class="{distinct-values(current-group()/@styleclass)}">
<xsl:for-each select="current-group()[@styleclass]">
<li>
<xsl:value-of select="text"/>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:for-each-group>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Ergebnis:
…
<p>Absatz vor der Liste</p>
<ul class="meineListe">
<li>Listenpunkt 1</li>
<li>Listenpunkt 2</li>
</ul>
<p>Absatz nach der Liste</p>
…
Grüße,
Thomas