Announcement

Collapse
No announcement yet.

mehrfach verschachtelte Gruppierungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mehrfach verschachtelte Gruppierungen

    Hallo Forum-Nutzer,

    seit einiger Zeit schlage ich mich mit einem Problem rum, welches ich einfach nicht lösen kann - zwar hatte ich zahlreiche Ideen, nur bringen die nicht das gewünschte Ergebnis.

    Angenommen folgende XML-Datei ist gegeben:

    <root>
    <heading1>Headline1</heading1>
    <para>Text</para>
    <para>Text</para>
    <listelement pos="1">first-1</listelement>
    <listelement pos="2">second-1</listelement>
    <listelement pos="3">third-1</listelement>
    <para>Text</para>
    <para>Text</para>
    <heading2>Headline2-1</heading2>
    <para>Text</para>
    <para>Text</para>
    <para>Text</para>
    <listelement pos="1">first-2</listelement>
    <listelement pos="2">second-2</listelement>
    <listelement pos="3">third-2</listelement>
    <para>Text</para>
    <heading2>Headline2-2</heading2>
    <para>Text</para>
    <listelement pos="1">first-3</listelement>
    <listelement pos="2">second-3</listelement>
    <para>Text</para>
    <para>Text</para>
    </root>

    Nun sollen zwei Strukturierungsvorgänge durchgeführt werden:
    1. An Hand der Headings wird eine verschachtelte Struktur erstellt - das funktioniert auch.
    2. Die Listenelemente sollen zu einer Liste gruppiert werden - funktioniert auch, aber es funktioniert eben nicht beides zusammen

    Hier die XSL-Datei:

    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    
    <xsl:output indent="yes" method="xml"/>
        <xsl:template match="/">
            <sect1>
                <xsl:call-template name="struktur"/>
            </sect1>
        </xsl:template>
    
    <xsl:template name="struktur">
        <xsl:for-each-group select="//para|//heading1|//heading2|//listelement" group-starting-with="heading2">
            <xsl:choose>
                <xsl:when test="current()[self::heading2]">
                    <sect2>
                        <xsl:apply-templates select="current-group()"/>
                    </sect2>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:apply-templates select="current-group()"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each-group>
    </xsl:template>
    
       <xsl:template name="liste">
        <xsl:for-each-group select="//listelement" group-starting-with="listelement[@pos='1']">
                <liste>
                            <xsl:apply-templates select="current-group()"/>
                </liste>
        </xsl:for-each-group>
       </xsl:template>
    
    
        <xsl:template match="heading1">
            <title>
                <xsl:apply-templates/>
            </title>
        </xsl:template>
    
        <xsl:template match="heading2">
            <title>
                <xsl:apply-templates/>
            </title>
        </xsl:template>
    
        <xsl:template match="para">
            <p>
                <xsl:apply-templates/>
            </p>
        </xsl:template>
    
        <xsl:template match="listelement">
            <li>
                <xsl:apply-templates/>
            </li>
        </xsl:template>
    </xsl:stylesheet>
    Das Template namens liste würde ich gern irgenwie im Template struktur aufrufen. Aber ich weiß nicht, ob das der richtige Ansatz ist.

    Für Hilfe wäre ich dankbar. Denn im Netz hab ich nichts gefunden oder in Büchern auch nicht - da waren es immer nur einfache Gruppierungen.

    Mfg nero

  • #2
    Ziel-XML

    gut, da mir keiner antwortet - nochmal zur Verständnisförderung die Ziel-XML:

    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <sect1>
       <title>Headline1</title>
       <p>Text</p>
       <p>Text</p>
       <liste>
          <li>first-1</li>
          <li>second-1</li>
          <li>third-1</li>
       </liste>
       <p>Text</p>
       <p>Text</p>
       <sect2>
          <title>Headline2-1</title>
          <p>Text</p>
          <p>Text</p>
          <p>Text</p>
          <liste>
             <li>first-2</li>
             <li>second-2</li>
             <li>third-2</li>
          </liste>
          <p>Text</p>
       </sect2>
       <sect2>
          <title>Headline2-2</title>
          <p>Text</p>
          <liste>
             <li>first-3</li>
             <li>second-3</li>
          </liste>
          <p>Text</p>
          <p>Text</p>
       </sect2>
    </sect1>
    Also, die Strukturierung erfolgt mittels sect1 und sect2, wobei sect1 ja das Wurzelelement ist (1. Vorgang). Dann sollen die Listen in die jeweilige Hierarchieebene einfließen (Kind von sect 1 oder sect 2)(2.Vorgang). Aber wie - das ist meine Frage.

    Comment

    Working...
    X