xsl-list
[Top] [All Lists]

Re: [xsl] problem with processing nodes

2007-12-19 14:21:13
Thanks Ken.

For future postings I will do my best. It is not very easy to decribe a problem in a foreign language :-)

I am very very thankful that volunteers take time to answer questions. Eventually I can take part in answering questions. But unfortuanately not now :-( The needed background and of course the needed practise are missing.

Greetings from Germany,
Andreas

G. Ken Holman schrieb:
At 2007-12-19 20:15 +0100, Andreas Peter wrote:
I have a problem with processing several nodes. My input document looks
like the following:
...
I use the following XSL for output:
...
The output should like this:

Here I'm stuck ... I cannot see why two <h2> elements are in the same <Ebene2> and I've tried many ways to get them both into one and I've given up:

<Ebene2>
<h2>1.2 Leben und Werk Ittmanns im Ã&#65533;berblick<fn>Die
biographischen Daten
beruhen auf einem Nachruf zu Ittmann (KÀhler-Meyer 1964), ...</fn></h2>
<p>Ittmann schilderte mitunter, wie er selbst wÀhrend der Reise auf
FuÃ&#65533;mÀrschen seine afrikanischen Begleiter befragte. ...</p>
<h2>1.3 Quellenlage, Eingrenzung, Aufbau und Methodik</h2>
<p>Aus Ittmanns reichhaltigem Schaffen galt es inhaltlich auszuwÀhlen
...</p>
</Ebene2>

I cannot take any more time to try and figure out the above, but for the rest, I think the code below does what you need.

Everything works fine except the <p>-elements from the
xsl:for-each-group. They are not processed properly.

Unfortunately, you don't explain what "properly" is, so I had to guess.

Any idea from the experts?

Making it a guessing game is not fun and it takes a lot of time ... in the future I suggest you put into words what you need, in addition to the data, so that volunteers don't have to guess. I cannot figure out why <p> elements are sometimes grouped and sometimes not. I added comments to explain the assertions I assumed.

Note the changes I made in the copying of node titles (your code was losing the <name_geo> structure), and in the composition of element names using an attribute value template (you had a redundant XPath if expression).

I hope the code below helps get you started, but I can't help with the above.

. . . . . . . . . . . Ken

p.s. also, my mailer does not handle UTF-8 well ... can you post examples with an XML declaration of ISO-8859-1 (Latin1) so that old mail systems don't get confused?


t:\ftemp>type andreas.xml
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<h01>Evangelium, afrikanisches Volkstum und geistiger Volksbesitz im
Denken des Missionars
Johannes Ittmann</h01>
<h02>bis zum ersten groen
<name_geo>Jamaika</name_geo>-Manuskript (ca.
1943) im Zusammenhang
der deutschen missionstheologischen Debatte 19091940</h02>
<h03>Magisterschrift</h03>
<p>zum Erwerb des Mag. theol.</p>
<p>nach der Ordnung der</p>
<bildunterschrift>
<p>Johannes Ittmann (18851963)</p>
</bildunterschrift>

<h1>1. Einleitung</h1>
<h2>1.1 Gott kommt frAOher als der
Missionar</h2>
<p>Gott kommt frAOher als der
Missionar so titelt ein Buch des
Befreiungstheologen Leonardo
Boff (1992). ...</p>
<p_e>Ittmann steht im Kontext der deutschen Missionstheologie seiner
Zeit, die davon ausgeht,
da das Volkstum
...</p_e>
<h2>1.2 Leben und Werk Ittmanns im berblick<fn>Die
biographischen Daten
beruhen auf einem
Nachruf zu Ittmann (KA?hler-Meyer 1964), ...</fn>
</h2>
<p>Ittmann schilderte mitunter, wie er selbst whrend der Reise auf
FuArschen seine
afrikanischen Begleiter befragte. ...</p>
<h2>1.3 Quellenlage, Eingrenzung, Aufbau und Methodik</h2>
<p>Aus Ittmanns reichhaltigem Schaffen galt es inhaltlich auszuwhlen
...</p>

<h1>2. Gott kommt frAOher als der
Missionar Inwiefern?</h1>
<h2>2.1 Einleitendes</h2>
<p>Gott kommt frAOher als der
Missionar so habe ich mit Leonardo
Boff
in der Einleitung
Ittmanns...</p>
<h3>2.1.1 Grobgestalt</h3>
<p>Die etwa 200 Seiten des Manuskriptes gliedern sich in eine Einleitung
von sechs Seiten und
vier Hauptteile:</p>
<h3>2.1.2 Ziele und Zielgruppen</h3>
<p>In der EinfAOhrung {I-VI} nennt Ittmann fAOnf Zielgruppen und
entsprechende Ziele:</p>
<h3>2.1.3 Methodenreflexion</h3>
<p>Gerade der letzte Punkt fordert ihn zur Klarlegung seiner Methode:
...</p>
<h4>Zu B. Leibesleben zwischen Geburt und Tod {14-24}</h4>
<p>Hier kommen beide zunA?chst auf die Beschneidung zu sprechen.
Johanssen (1931, 199-201)
...</p>
</Root>
t:\ftemp>type andreas.xsl
<?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"/>

<xsl:template match="/">
<Teil>
<xsl:apply-templates select="Root"/>
</Teil>
</xsl:template>

<xsl:template match="Root">
<Titelei>
<xsl:call-template name="titelei"/>
</Titelei>
<inhalt>
<xsl:call-template name="inhalt"/>
</inhalt>
</xsl:template>

<xsl:template name="titelei">
<xsl:param name="t" select="1"/>
<xsl:param name="nodes" select="*"/>
<!--group according to the expected level-->
<xsl:for-each-group select="$nodes"
group-starting-with="*[name()=concat('h0',$t)]">
<xsl:choose>
<xsl:when test="name()=concat('h0',$t)">
<xsl:element name="h0{$t}">
<xsl:copy-of select="node()"/>
</xsl:element>
<!--only copy nodes from the expected level-->
<xsl:choose>
<xsl:when test="not(current-group()[position()>1]
[starts-with(local-name(.),'h0')])">
<!--there are no deeper levels, so copy everything up
until the next heading-->
<xsl:for-each-group select="current-group()[position()>1]"
group-starting-with="*[starts-with(local-name(.),'h')]">
<xsl:if test="position()=1">
<xsl:copy-of select="current-group()"/>
</xsl:if>
</xsl:for-each-group>
</xsl:when>
<xsl:otherwise>
<!--there are deeper levels, so go deep-->
<xsl:call-template name="titelei">
<xsl:with-param name="t" select="$t+1"/>
<xsl:with-param name="nodes"
select="current-group()[position()!=1]"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>

<xsl:template name="inhalt">
<xsl:param name="i" select="1"/>
<xsl:param name="nodes" select="*"/>
<!--group according to the expected level-->
<xsl:for-each-group select="$nodes"
group-starting-with="*[name()=concat('h',$i)]">
<xsl:choose>
<xsl:when test="name()=concat('h',$i)">
<xsl:element name="Ebene{$i}">
<xsl:element name="h{$i}">
<xsl:copy-of select="node()"/>
</xsl:element>
<!--only copy nodes from the expected level up
until the next heading-->
<xsl:for-each-group select="current-group()[position()>1]"
group-starting-with="*[starts-with(local-name(.),'h')]">
<xsl:if test="position()=1">
<xsl:copy-of select="current-group()"/>
</xsl:if>
</xsl:for-each-group>
<xsl:if test="current-group()[position()>1]
[starts-with(local-name(.),'h')]">
<!--there are deeper levels, so go deep-->
<xsl:call-template name="inhalt">
<xsl:with-param name="i" select="$i+1"/>
<xsl:with-param name="nodes"
select="current-group()[position()!=1]"/>
</xsl:call-template>
</xsl:if>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
t:\ftemp>call xslt2 andreas.xml andreas.xsl andreas-out.xml

t:\ftemp>type andreas-out.xml
<?xml version="1.0" encoding="UTF-8"?>
<Teil>
<Titelei>
<h01>Evangelium, afrikanisches Volkstum und geistiger Volksbesitz im
Denken des Missionars
Johannes Ittmann</h01>
<h02>bis zum ersten groen
<name_geo>Jamaika</name_geo>-Manuskript (ca.
1943) im Zusammenhang
der deutschen missionstheologischen Debatte 19091940</h02>
<h03>Magisterschrift</h03>
<p>zum Erwerb des Mag. theol.</p>
<p>nach der Ordnung der</p>
<bildunterschrift>
<p>Johannes Ittmann (18851963)</p>
</bildunterschrift>
</Titelei>
<inhalt>
<Ebene1>
<h1>1. Einleitung</h1>
<h2>1.1 Gott kommt frAOher als der
Missionar</h2>
<p>Gott kommt frAOher als der
Missionar so titelt ein Buch des
Befreiungstheologen Leonardo
Boff (1992). ...</p>
<p_e>Ittmann steht im Kontext der deutschen Missionstheologie seiner
Zeit, die davon ausgeht,
da das Volkstum
...</p_e>
<Ebene2>
<h2>1.1 Gott kommt frAOher als der
Missionar</h2>
<p>Gott kommt frAOher als der
Missionar so titelt ein Buch des
Befreiungstheologen Leonardo
Boff (1992). ...</p>
<p_e>Ittmann steht im Kontext der deutschen Missionstheologie seiner
Zeit, die davon ausgeht,
da das Volkstum
...</p_e>
</Ebene2>
<Ebene2>
<h2>1.2 Leben und Werk Ittmanns im berblick<fn>Die
biographischen Daten
beruhen auf einem
Nachruf zu Ittmann (KA?hler-Meyer 1964), ...</fn>
</h2>
<p>Ittmann schilderte mitunter, wie er selbst whrend der Reise auf
FuArschen seine
afrikanischen Begleiter befragte. ...</p>
</Ebene2>
<Ebene2>
<h2>1.3 Quellenlage, Eingrenzung, Aufbau und Methodik</h2>
<p>Aus Ittmanns reichhaltigem Schaffen galt es inhaltlich auszuwhlen
...</p>
</Ebene2>
</Ebene1>
<Ebene1>
<h1>2. Gott kommt frAOher als der
Missionar Inwiefern?</h1>
<h2>2.1 Einleitendes</h2>
<p>Gott kommt frAOher als der
Missionar so habe ich mit Leonardo
Boff
in der Einleitung
Ittmanns...</p>
<Ebene2>
<h2>2.1 Einleitendes</h2>
<p>Gott kommt frAOher als der
Missionar so habe ich mit Leonardo
Boff
in der Einleitung
Ittmanns...</p>
<Ebene3>
<h3>2.1.1 Grobgestalt</h3>
<p>Die etwa 200 Seiten des Manuskriptes gliedern sich in eine Einleitung
von sechs Seiten und
vier Hauptteile:</p>
</Ebene3>
<Ebene3>
<h3>2.1.2 Ziele und Zielgruppen</h3>
<p>In der EinfAOhrung {I-VI} nennt Ittmann fAOnf Zielgruppen und
entsprechende Ziele:</p>
</Ebene3>
<Ebene3>
<h3>2.1.3 Methodenreflexion</h3>
<p>Gerade der letzte Punkt fordert ihn zur Klarlegung seiner Methode:
...</p>
<Ebene4>
<h4>Zu B. Leibesleben zwischen Geburt und Tod {14-24}</h4>
<p>Hier kommen beide zunA?chst auf die Beschneidung zu sprechen.
Johanssen (1931, 199-201)
...</p>
</Ebene4>
</Ebene3>
</Ebene2>
</Ebene1>
</inhalt>
</Teil>
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(_at_)CraneSoftwrights(_dot_)com
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


--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>