Subject: Re: problem with creating structure
From: Andreas <info@xxxxxxxxxx>
Date: Mon, 12 Nov 2007 10:04:14 +0100
|
Hello Michael,
I am using XSLT 2.0.
Thanks,
Andreas
On 12.11.2007 0:33 Uhr, "Michael Kay" <mike@xxxxxxxxxxxx> wrote:
>
> There is a construct in XSLT 2.0 explicitly designed for problems like
this:
>
> <xsl:for-each-group group-starting-with="h2">
>
> It can be done in XSLT 1.0, using recursion, but requires more effort. So
> the first thing to establish is, are you using XSLT 2.0 or 1.0?
>
> Michael Kay
> http://www.saxonica.com/
>
>> -----Original Message-----
>> From: Andreas Peter [mailto:info@xxxxxxxxxx]
>> Sent: 11 November 2007 21:05
>> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>> Subject: problem with creating structure
>>
>> Hello list,
>>
>> XSL exasperates me! I have the following XML structure:
>>
>> <Root>
>> <Textabschnitt>
>> <h1>Geistiger Volksbesitz der Kameruner im Blickfeld
>> des Missionars</h1>
>> <h2>Einf|hrung </h2>
>> <p>...</p>
>> <p>...</p>
>> <p>...</p>
>> <p>...</p>
>> <p>...</p>
>> <h2>I.Teil: Der Mensch 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.
>> I have the following XSL code which generates for every <h2>
>> element an element <chapter>.
>>
>> <xsl:template match="Root">
>> <xsl:element name="set">
>> <xsl:element name="book">
>> <xsl:element name="bookinfo"/>
>> <xsl:element name="title">
>> <xsl:value-of select="/h1"/>
>> </xsl:element>
>> <xsl:apply-templates/>
>> </xsl:element>
>> </xsl:element>
>> </xsl:template>
>>
>> <xsl:template match="h2">
>> <xsl:for-each select=".">
>> <xsl:if test="position() = 1">
>> <xsl:element name="chapter">
>> <xsl:element name="title">
>> <xsl:value-of select=".[position() = 1]"/>
>> </xsl:element>
>> </xsl:element>
>> </xsl:if>
>> <xsl:if test="position() != 1">
>> <xsl:element name="title">
>> <xsl:value-of select=".[position() != 1]"/>
>> </xsl:element>
>> </xsl:if>
>> </xsl:for-each>
>> <xsl:apply-templates/>
>> </xsl:template>
>>
>> <xsl:template match="h3">
>> <xsl:for-each select=".">
>> <xsl:element name="sect1">
>> <xsl:element name="title">
>> <xsl:value-of select="."/>
>> </xsl:element>
>> </xsl:element>
>> </xsl:for-each>
>> <xsl:apply-templates/>
>> </xsl:template>
>>
>> <xsl:template match="h4">
>> <xsl:for-each select=".">
>> <xsl:element name="sect2">
>> <xsl:element name="title">
>> <xsl:value-of select="."/>
>> </xsl:element>
>> <xsl:for-each select="Root/Textabschnitt/h4/p">
>> <xsl:element name="para">
>> <xsl:value-of select="p"/>
>> </xsl:element>
>> </xsl:for-each>
>> </xsl:element>
>> </xsl:for-each>
>> <xsl:apply-templates/>
>> </xsl:template>
>>
>> Unfortunately I cannot see the problem. Any hint from the
>> experts? I hope this is enough code.
>>
>> Thanks so much,
>> Andreas
| Current Thread |
Michael Kay - 11 Nov 2007 23:33:43 -0000
- Andreas - 12 Nov 2007 09:04:39 -0000 <=
|
|