ThomasM: Absatzstil via css als Liste darstellen?

Beitrag lesen

Hallo Gunnar,

Nur die para-Elemente mit Attribut styleclass="meineListe" sollen zu li werden, und das mit ul 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