[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] 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 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|