Re: [xsl] Adding structure to a docment based on attributes

Subject: Re: [xsl] Adding structure to a docment based on attributes
From: Jörg Heinicke <joerg.heinicke@xxxxxx>
Date: Mon, 24 Sep 2001 23:23:37 +0200
Hello Nicholas,

for your simplified XML the following stylesheet will work:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
    <xsl:output indent="yes"/>
    <xsl:template match="root">
            <xsl:apply-templates select="p[@style='Heading1']"/>

    <xsl:template match="p[@style='Heading1']">
                <xsl:value-of select="text()"/>
            <xsl:variable name="pos">
                <xsl:for-each select="following-sibling::p">
                    <xsl:if test="@style='Heading1'">
                        <xsl:value-of select="position()"/>
select="following-sibling::p[@style='Heading2'][position() &lt; $pos]"/>

    <xsl:template match="p[@style='Heading2']">
                <xsl:value-of select="text()"/>

    <xsl:template match="p[@style='Body']">
            <xsl:value-of select="text()"/>

But with more complex XML it will be very difficult to get a correct and
generally working stylesheet. I hope the code is understandable.



----- Original Message -----
From: "Nicholas Waltham" <info@xxxxxxxxxxxx>
To: "xsl-list" <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Monday, September 24, 2001 1:49 PM
Subject: [xsl] Adding structure to a docment based on attributes

> Adding sections/subjections and levels depending on formatting type
> information
> I have an XML document which contains formatting type information like
> (actually this is a bit simplified)
> <p style="Heading1">Top Level Heading</p>
> <p stlye=Body>Some text at this level</p>
> <p style="Heading2">Sub Heading 1</p>
> <p stlye=Body>Some text here</p>
> <p style="Heading2">Sub heading 2</p>
> <p stlye=Body>Some text here</p>
> <p style="Heading1">Another Heading</p>
> <p stlye=Body>Some more text here</p>
> I would like to add some logical structure to the document, to have
> something like this
> <MAIN><HEADING>Top Level Heading</HEADING><TEXT>Some text at this
> level</TEXT>
> <SUBSECTION><HEADING>Sub Heading 1<TEXT>Some text here</TEXT></SUBSECTION>
> <SUBSECTION><HEADING>Sub Heading 2<TEXT>Some text here</TEXT></SUBSECTION>
> <HEADING>Top Level Heading</HEADING><TEXT>Some more text here</TEXT>
> </MAIN>
> Can I do this with XSLT, some pointers would be great.
> I know for example I can match the different styles with a template
> match="p[@style='Heading1']"
> but the problem is closing the logical structure at the right place.
> Hope you can help,
> Regards,
> Nicholas Waltham

 XSL-List info and archive:

Current Thread