Subject: RE: number + document
From: Americo Albuquerque <melinor@xxxxxxx>
Date: Fri, 20 Jun 2003 14:29:01 +0100
|
Hi
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of abbouh
> Sent: Wednesday, June 18, 2003 7:42 PM
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject: number + document
>
>
> i want to use nuber for each "ht" node in several document
> so i use this xsl file:
> <xsl:for-each select="//doccontent/chapmod">
> <xsl:for-each
> select="document(concat(string(./attribute::docref),'.xml'))//ht">
> <xsl:choose>
> ....
> <xsl:number level="multiple" count="chap1|chap2|chap3"
> format="A.1"/> .. <xsl:value-of select="."/> ..
> </xsl:for-each> </xsl:for-each>
>
> and receive this output:
>
> A title1
> A title2
> A.1 paragraph1
> A.1.1 ss-paragraph1
> A.1.2 ss-paragraph2
> A.1.3 ss-paragraph3
> A.2 paragraph2
> A title3
>
That's because xsl:number sees each chap diferently because they have
diferent parents.
>
> but what i want to get is:
>
> A title1
> B title2
> B.1 paragraph1
> B.1.1 ss-paragraph1
> B.1.2 ss-paragraph2
> B.1.3 ss-paragraph3
> B.2 paragraph2
> C title3
>
Try this:
<xsl:stylesheet exclude-result-prefixes="ms" version="1.0"
xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="doccontent">
<!-- create ntf with all chapters -->
<xsl:variable name="docs">
<xsl:for-each select="chapmod">
<xsl:for-each select="document(concat(@docref,'.xml'))">
<xsl:copy-of select="/doccontent/docbody/*"/>
</xsl:for-each>
</xsl:for-each>
</xsl:variable>
<!-- all chapters now have the same parent so the xsl:number should
work now -->
<xsl:apply-templates select="ms:node-set($docs)" mode="chapters"/>
</xsl:template>
<xsl:template match="/" mode="chapters">
<xsl:apply-templates mode="chapters"/>
</xsl:template>
<xsl:template match="chap1 | chap2 | chap3" mode="chapters">
<xsl:number count="chap1 | chap2 | chap3" format="A.1"
level="multiple"/>
<xsl:text> </xsl:text>
<xsl:apply-templates select="ht"/>
<xsl:text> </xsl:text>
<xsl:apply-templates mode="chapters" select="*[not(self::ht)]"/>
</xsl:template>
</xsl:stylesheet>
If you use another processor you'll have to change the ms namespace
accordingly. It's need is to use the node-set function, so you can use any
one you want that has a similar function (xalan, saxon, etc)
Hope this helps
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
- number + document
- abbouh - Wed, 18 Jun 2003 14:31:06 -0400 (EDT)
- abbouh - Thu, 19 Jun 2003 05:14:29 -0400 (EDT)
- Americo Albuquerque - Fri, 20 Jun 2003 09:31:18 -0400 (EDT) <=
|
|