[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: problem with creating structure

Subject: Re: problem with creating structure
From: Andreas <info@xxxxxxxxxx>
Date: Mon, 12 Nov 2007 10:03:28 +0100
Re:  problem with creating structure
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 &#65279;Mensch CbCB- ein &#65279;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 &#65279;Mensch CB- ein
&#65279;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 &#65279;Mensch CB- ein &#65279;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. &#65279;Beerdigungssitten und &#65279;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
> &#132;Mensch&#147; ein Leib-Geistwesen, denn
> im Normalzustand besteht sein
>              KCB6rper aus der eyobo &#132;HCB<lle&#147;, in der, sie ganz
> ausfCB<llend, mudi &#132;die Lebensseele&#147; 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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.