[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: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Sun, 11 Nov 2007 17:31:59 -0500
Re:  problem with creating structure
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>EinfCB<hrung </h2>
       <p>...</p>
       <p>...</p>
       <p>...</p>
       <p>...</p>
       <p>...</p>
       <h2>I.Teil: Der &#65279;Mensch CB- 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>EinfC<hrung </h2>
        <p>AuCer ihnen gibt es aber auch andere, die vermuten, aus
der Schilderung des inneren
            Erlebens primitiver StC$mme mit ihrer einfachen, mehr
geschlossenen Weltanschauung nicht</p>
        <p>Dazu sind die Blicke vieler auf unsere einstigen Kolonien
gerichtet in der bestimmten
            Erwartung, daC uns das Ende des gegenwC$rtigen Krieges
wieder in den Besitz des</p>
        <p>Entsprechend seinem Beruf hat der Verfasser auch den Titel
seines Buches gewC$hlt. Damit
            mag fC<r viele schon C<ber das Folgende ein Urteil gefC$llt
sein: Geschaut mit beschrC$nktem
            und voreingenommenem Blick! Nun ist der Verfasser dankbar
manchen MC$nnern der
            Wissenschaft der Heimat, die durch sichtende Arbeit im
Studierzimmer mancherle</p>
...
            <sect1>
                <title>I.Teil: Der &#65279;Mensch B- ein
&#65279;Leib</title>
                <para>AuCer ihnen gibt es aber auch andere, die
vermuten, aus der Schilderung des
                 inneren Erlebens primitiver StC$mme mit ihrer
einfachen, mehr geschlossenen
                    Weltanschauung nicht nur SchlC<sse auf die
Vorgeschichte der KulturvC6lker ziehen
                    zu kC6nnen, sondern daC sie auch Fingerzeige geben
fC<r manche uns noch nicht ganz
                    geklC$rte Fragen, die der gewaltige Umbruch
unseres heimatlichen Volkslebens im
                    letzten Jahrzehnt uns gestellt [hat]. Welche
Wechselbeziehungen da bestehen
                    kC6nnen, sieht der besonders, dem ein Einblick in
den Mechanismus des fremden
                    Volkslebens gegeben ist und der auch die VorgC$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>EinfC<hrung </h2> <p>AuCer ihnen gibt es aber auch andere, die vermuten, aus der Schilderung des inneren Erlebens primitiver StC$mme mit ihrer einfachen, mehr geschlossenen Weltanschauung nicht</p> <p>Dazu sind die Blicke vieler auf unsere einstigen Kolonien gerichtet in der bestimmten Erwartung, daC uns das Ende des gegenwC$rtigen Krieges wieder in den Besitz des</p> <p>Entsprechend seinem Beruf hat der Verfasser auch den Titel seines Buches gewC$hlt. Damit mag fC<r viele schon C<ber das Folgende ein Urteil gefC$llt sein: Geschaut mit beschrC$nktem und voreingenommenem Blick! Nun ist der Verfasser dankbar manchen MC$nnern der Wissenschaft der Heimat, die durch sichtende Arbeit im Studierzimmer mancherle</p> <h2>I.Teil: Der &#65279;Mensch B- ein &#65279;Leib </h2> <h3>Allgemeines</h3> <p>So ist auch die Einheit BMenschB ein Leib-Geistwesen, denn im Normalzustand besteht sein KC6rper aus der eyobo BHC<lleB, in der, sie ganz ausfC<llend, mudi Bdie LebensseeleB webt. Sie ist der eigentliche TrC$ger des Lebens. Ohne diese Lebensseele ist der Mensch in</p> <p>Was denkt nun der Kameruner C<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 GebrC$uche variieren bei den verschiedenen StC$mmen, in den groCen ZC<gen aber C$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>EinfC<hrung </title>
         <para>AuCer ihnen gibt es aber auch andere, die vermuten, aus
der Schilderung des inneren
            Erlebens primitiver StC$mme mit ihrer einfachen, mehr
geschlossenen Weltanschauung nichtDazu sind die
Blicke vieler auf unsere einstigen Kolonien
gerichtet in der bestimmten
            Erwartung, daC uns das Ende des gegenwC$rtigen Krieges
wieder in den Besitz desEntsprechend seinem Beruf
hat der Verfasser auch den Titel
seines Buches gewC$hlt. Damit
            mag fC<r viele schon C<ber das Folgende ein Urteil gefC$llt
sein: Geschaut mit beschrC$nktem
            und voreingenommenem Blick! Nun ist der Verfasser dankbar
manchen MC$nnern der
            Wissenschaft der Heimat, die durch sichtende Arbeit im
Studierzimmer mancherle</para>
         <sect1>
            <title>I.Teil: Der o;?Mensch B- ein o;?Leib </title>
            <para>AuCer ihnen gibt es aber auch andere, die vermuten, aus
der Schilderung des inneren
            Erlebens primitiver StC$mme mit ihrer einfachen, mehr
geschlossenen Weltanschauung nichtDazu sind die
Blicke vieler auf unsere einstigen Kolonien
gerichtet in der bestimmten
            Erwartung, daC uns das Ende des gegenwC$rtigen Krieges
wieder in den Besitz desEntsprechend seinem Beruf
hat der Verfasser auch den Titel
seines Buches gewC$hlt. Damit
            mag fC<r viele schon C<ber das Folgende ein Urteil gefC$llt
sein: Geschaut mit beschrC$nktem
            und voreingenommenem Blick! Nun ist der Verfasser dankbar
manchen MC$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
            KC6rper aus der eyobo &#132;HC<lle&#147;, in der, sie ganz
ausfC<llend, mudi &#132;die Lebensseele&#147; webt.
            Sie ist der eigentliche TrC$ger des Lebens. Ohne diese
Lebensseele ist der Mensch inWas denkt nun der
Kameruner C<ber seine leibliche
Existenzform, die seine Lebensseele an
            die Sichtbarkeit bindet? </para>
         </sect2>
         <sect3>
            <title>2. o;?Beerdigungssitten und o;?Totenfeiern bei
den Bakwiri </title>
            <para>Die Einzelheiten der
verschiedenen GebrC$uche variieren bei
den verschiedenen StC$mmen, in
            den groCen ZC<gen aber C$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

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.