Subject: Re: problem with creating structure
From: Andreas <info@xxxxxxxxxx>
Date: Mon, 12 Nov 2007 10:03:28 +0100
|
On 11.11.2007 23:31 Uhr, "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
wrote:
> At 2007-11-11 22:48 +0100, Andreas Peter wrote:
>> Quoting "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>:
>>> At 2007-11-11 22:05 +0100, Andreas Peter wrote:
>>>> XSL exasperates me! I have the following XML structure:
>>>>
>>>> <Root>
>>>> <Textabschnitt>
>>>> <h1>Geistiger Volksbesitz der Kameruner im Blickfeld des
>>>> Missionars</h1>
>>>> <h2>EinfCFCB<hrung </h2>
>>>> <p>...</p>
>>>> <p>...</p>
>>>> <p>...</p>
>>>> <p>...</p>
>>>> <p>...</p>
>>>> <h2>I.Teil: Der Mensch CbCB- ein Leib </h2>
>>>> <h3>Allgemeines </h3>
>>>> <p>...</p>
>>>> <p>...</p>
>>>> <p>...</p>
>>>> <p>...</p>
>>>> <p>...</p>
>>>> </Textabschnitt>
>>>> </Root>
>>>>
>>>> This should be transformed into the following XML structure:
>>>>
>>>> <set>
>>>> <book>
>>>> <bookinfo/>
>>>> <title/>
>>>> <chapter>
>>>> <title/>
>>>> <para/>
>>>> <sect1>
>>>> <title/>
>>>> <para/>
>>>> </sect1>
>>>> <sect2>
>>>> <title/>
>>>> <para/>
>>>> </sect2>
>>>> <sect3>
>>>> <title/>
>>>> <para/>
>>>> </sect3>
>>>> </chapter>
>>>> </book>
>>>> </set>
>>>>
>>>> I want to insert an element <chapter> before the element <h2> but only
>>>> for the first element <h2>. The second element <h2> should be
>>>> transformed to <title>. And I need to output every <p> element
>>>> according to its proir element until the next <h2>, <h3>, ... occures.
>
> Wow ... okay ... now looking at your data I can
> see what you want (not why, but that doesn't have to be justified).
>
> But I am concerned that the end of the text in
> the paragraph under <sect1> doesn't match the
> content after the first <h2> ... I implied from
> your definition that the same text appears twice:
>
>> <h2>EinfCB<hrung </h2>
>> <p>AuCE8er ihnen gibt es aber auch andere, die vermuten, aus
>> der Schilderung des inneren
>> Erlebens primitiver StCB$mme mit ihrer einfachen, mehr
>> geschlossenen Weltanschauung nicht</p>
>> <p>Dazu sind die Blicke vieler auf unsere einstigen Kolonien
>> gerichtet in der bestimmten
>> Erwartung, daCE8 uns das Ende des gegenwCB$rtigen Krieges
>> wieder in den Besitz des</p>
>> <p>Entsprechend seinem Beruf hat der Verfasser auch den Titel
>> seines Buches gewCB$hlt. Damit
>> mag fCB<r viele schon CB<ber das Folgende ein Urteil
gefCB$llt
>> sein: Geschaut mit beschrCB$nktem
>> und voreingenommenem Blick! Nun ist der Verfasser dankbar
>> manchen MCB$nnern der
>> Wissenschaft der Heimat, die durch sichtende Arbeit im
>> Studierzimmer mancherle</p>
>> ...
>> <sect1>
>> <title>I.Teil: Der Mensch CB- ein
Leib</title>
>> <para>AuCE8er ihnen gibt es aber auch andere, die
>> vermuten, aus der Schilderung des
>> inneren Erlebens primitiver StCB$mme mit ihrer
>> einfachen, mehr geschlossenen
>> Weltanschauung nicht nur SchlCB<sse auf die
>> Vorgeschichte der KulturvCB6lker ziehen
>> zu kCB6nnen, sondern daCE8 sie auch Fingerzeige
geben
>> fCB<r manche uns noch nicht ganz
>> geklCB$rte Fragen, die der gewaltige Umbruch
>> unseres heimatlichen Volkslebens im
>> letzten Jahrzehnt uns gestellt [hat]. Welche
>> Wechselbeziehungen da bestehen
>> kCB6nnen, sieht der besonders, dem ein Einblick in
>> den Mechanismus des fremden
>> Volkslebens gegeben ist und der auch die VorgCB$nge
>> in der Heimat mit pochendem
>> Herzen verfolgt und miterlebt hat.</para>
>> </sect1>
>
> I'm guessing that this is just a copy/paste
> problem, as I otherwise don't see why the text should be different.
>
> So I think the following is an XSLT 2 approach to
> your problem. Right away one should think of
> using group-starting-with= because you are moving
> from a flat structure to a nested structure.
>
> I hope this helps!
>
> . . . . . . . . . . . . . Ken
>
>
> t:\ftemp>type andreas.xml
> <Root>
> <Textabschnitt>
> <h1>Geistiger Volksbesitz der Kameruner im Blickfeld des
> Missionars </h1>
> <h2>EinfCB<hrung </h2>
> <p>AuCE8er ihnen gibt es aber auch andere, die vermuten, aus
> der Schilderung des inneren
> Erlebens primitiver StCB$mme mit ihrer einfachen, mehr
> geschlossenen Weltanschauung nicht</p>
> <p>Dazu sind die Blicke vieler auf unsere einstigen Kolonien
> gerichtet in der bestimmten
> Erwartung, daCE8 uns das Ende des gegenwCB$rtigen Krieges
> wieder in den Besitz des</p>
> <p>Entsprechend seinem Beruf hat der Verfasser auch den Titel
> seines Buches gewCB$hlt. Damit
> mag fCB<r viele schon CB<ber das Folgende ein Urteil
gefCB$llt
> sein: Geschaut mit beschrCB$nktem
> und voreingenommenem Blick! Nun ist der Verfasser dankbar
> manchen MCB$nnern der
> Wissenschaft der Heimat, die durch sichtende Arbeit im
> Studierzimmer mancherle</p>
> <h2>I.Teil: Der Mensch CB- ein Leib </h2>
> <h3>Allgemeines</h3>
> <p>So ist auch die Einheit CbMenschCb ein Leib-Geistwesen,
denn
> im Normalzustand besteht sein
> KCB6rper aus der eyobo CbHCB<lleCb, in der, sie ganz
> ausfCB<llend, mudi Cbdie LebensseeleCb webt.
> Sie ist der eigentliche TrCB$ger des Lebens. Ohne diese
> Lebensseele ist der Mensch in</p>
> <p>Was denkt nun der Kameruner CB<ber seine leibliche
> Existenzform, die seine Lebensseele an
> die Sichtbarkeit bindet? </p>
> <h4>2. Beerdigungssitten und Totenfeiern bei
> den <name_group>Bakwiri </name_group></h4>
> <p>Die Einzelheiten der verschiedenen GebrCB$uche variieren bei
> den verschiedenen StCB$mmen, in
> den groCE8en ZCB<gen aber CB$hneln sie sich. </p>
> </Textabschnitt>
> </Root>
> t:\ftemp>type andreas.xsl
> <?xml version="1.0" encoding="US-ASCII"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> exclude-result-prefixes="xsd"
> version="2.0">
>
> <xsl:output indent="yes"/>
>
> <!--main structure-->
> <xsl:template match="/">
> <set>
> <book>
> <bookinfo/>
> <xsl:apply-templates/>
> </book>
> </set>
> </xsl:template>
>
> <!--main content-->
> <xsl:template match="Textabschnitt">
> <!--only handle the title and the first expected section-->
> <xsl:apply-templates select="h1 | h2[1]"/>
> </xsl:template>
>
> <!--do a title-->
> <xsl:template match="h1">
> <title><xsl:apply-templates/></title>
> </xsl:template>
>
> <!--catch the first section and reconstruct the content as a chapter-->
> <xsl:template match="h2">
> <chapter>
> <!--put out the first H2 as content-->
> <title><xsl:apply-templates/></title>
> <para>
> <xsl:for-each-group select="following-sibling::*"
> group-starting-with="h2|h3|h4">
> <xsl:if test="position()=1">
> <!--copy the first H2 as the body text-->
> <xsl:copy-of select="current-group()[self::p]/node()"/>
> </xsl:if>
> </xsl:for-each-group>
> </para>
> <!--put out the first content *again* but
> using the second H2 as a title-->
> <xsl:for-each-group select=". | following-sibling::*"
> group-starting-with="h2|h3|h4">
> <!--determine the paragraph content regardless of where we are-->
> <xsl:variable name="section-content">
> <para>
> <xsl:copy-of select="current-group()[self::p]/node()"/>
> </para>
> </xsl:variable>
> <xsl:choose>
> <xsl:when test="position()=1">
> <!--must be repeating the first content, so use the second H2
> for the title-->
> <sect1>
> <title>
> <xsl:apply-templates select="following-sibling::h2/node()"/>
> </title>
> <xsl:copy-of select="$section-content"/>
> </sect1>
> </xsl:when>
> <xsl:when test="self::h2">
> <!--do nothing because the second H2 has already been handled-->
> </xsl:when>
> <xsl:otherwise>
> <!--this is a subsequent section-->
> <xsl:element name="sect{number(substring-after(name(.),'h')) -
1}">
> <title><xsl:apply-templates/></title>
> <xsl:copy-of select="$section-content"/>
> </xsl:element>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:for-each-group>
> </chapter>
> </xsl:template>
>
> </xsl:stylesheet>
> t:\ftemp>call xslt2 andreas.xml andreas.xsl andreas.out
>
> t:\ftemp>type andreas.out
> <?xml version="1.0" encoding="UTF-8"?>
> <set>
> <book>
> <bookinfo/>
> <title>Geistiger Volksbesitz der Kameruner im Blickfeld des
> Missionars </title>
> <chapter>
> <title>EinfCB<hrung </title>
> <para>AuCE8er ihnen gibt es aber auch andere, die vermuten, aus
> der Schilderung des inneren
> Erlebens primitiver StCB$mme mit ihrer einfachen, mehr
> geschlossenen Weltanschauung nichtDazu sind die
> Blicke vieler auf unsere einstigen Kolonien
> gerichtet in der bestimmten
> Erwartung, daCE8 uns das Ende des gegenwCB$rtigen Krieges
> wieder in den Besitz desEntsprechend seinem Beruf
> hat der Verfasser auch den Titel
> seines Buches gewCB$hlt. Damit
> mag fCB<r viele schon CB<ber das Folgende ein Urteil
gefCB$llt
> sein: Geschaut mit beschrCB$nktem
> und voreingenommenem Blick! Nun ist der Verfasser dankbar
> manchen MCB$nnern der
> Wissenschaft der Heimat, die durch sichtende Arbeit im
> Studierzimmer mancherle</para>
> <sect1>
> <title>I.Teil: Der C/B;B?Mensch CB- ein C/B;B?Leib </title>
> <para>AuCE8er ihnen gibt es aber auch andere, die vermuten,
aus
> der Schilderung des inneren
> Erlebens primitiver StCB$mme mit ihrer einfachen, mehr
> geschlossenen Weltanschauung nichtDazu sind die
> Blicke vieler auf unsere einstigen Kolonien
> gerichtet in der bestimmten
> Erwartung, daCE8 uns das Ende des gegenwCB$rtigen Krieges
> wieder in den Besitz desEntsprechend seinem Beruf
> hat der Verfasser auch den Titel
> seines Buches gewCB$hlt. Damit
> mag fCB<r viele schon CB<ber das Folgende ein Urteil
gefCB$llt
> sein: Geschaut mit beschrCB$nktem
> und voreingenommenem Blick! Nun ist der Verfasser dankbar
> manchen MCB$nnern der
> Wissenschaft der Heimat, die durch sichtende Arbeit im
> Studierzimmer mancherle</para>
> </sect1>
> <sect2>
> <title>Allgemeines</title>
> <para>So ist auch die Einheit
> „Mensch“ ein Leib-Geistwesen, denn
> im Normalzustand besteht sein
> KCB6rper aus der eyobo „HCB<lle“, in der, sie ganz
> ausfCB<llend, mudi „die Lebensseele“ webt.
> Sie ist der eigentliche TrCB$ger des Lebens. Ohne diese
> Lebensseele ist der Mensch inWas denkt nun der
> Kameruner CB<ber seine leibliche
> Existenzform, die seine Lebensseele an
> die Sichtbarkeit bindet? </para>
> </sect2>
> <sect3>
> <title>2. C/B;B?Beerdigungssitten und C/B;B?Totenfeiern bei
> den Bakwiri </title>
> <para>Die Einzelheiten der
> verschiedenen GebrCB$uche variieren bei
> den verschiedenen StCB$mmen, in
> den groCE8en ZCB<gen aber CB$hneln sie sich. </para>
> </sect3>
> </chapter>
> </book>
> </set>
> t:\ftemp>rem Done!
>
>
>
> --
> Comprehensive in-depth XSLT2/XSL-FO1.1 classes: Austin TX,Jan-2008
> World-wide corporate, govt. & user group XML, XSL and UBL training
> RSS feeds: publicly-available developer resources and training
> G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
> Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
> Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
> Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc
> Legal business disclaimers: http://www.CraneSoftwrights.com/legal
>
>
Hi Ken,
This is exactly what I wanted to do. Thanks a lot.
Andreas
|