[Home] [By Thread] [By Date] [Recent Entries]
Hi all,
I would like to build a toc using xsl:number (version 2.0 with saxon) avoiding element with pdf="no" attributes. The first group element always has pdf="no" attribute. Other group elements can have this attribute or not. Data are as follows:
----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<workshop>
<meta>
<title><line>t</line></title>
<image path="t.jpg"
author="p" />
<identification>t</identification>
</meta>
<body>
<base>f</base>
<group pdf="no">
<reference>a</reference>
<group>
<reference>a/b</reference>
<group>
<reference>a/b/c</reference>
<group>
<reference>a/b/c/d</reference>
</group>
<group>
<reference>a/b/c/e</reference>
</group>
</group>
</group>
<group>
<reference>a/f</reference>
<group>
<reference>a/f/g</reference>
<group>
<reference>a/f/g/h</reference>
</group>
</group>
<group pdf="no">
<reference>a/f/i</reference>
<group>
<reference>a/f/i/j</reference>
</group>
</group>
</group>
</group>
</body>
</workshop>my attempt : ----------------- <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:pf="http://www.pimeca.com/pf" xmlns:fn="http://www.w3.org/2005/xpath-functions"> <xsl:output encoding="UTF-8" method="xml" omit-xml-declaration="no" indent="yes" /> <xsl:template match="/workshop"> <r> <xsl:apply-templates select="body" /> </r> </xsl:template> <xsl:template match="meta" /> <xsl:template match="body"> <xsl:apply-templates select="group" /> </xsl:template> <xsl:template match="group[not(@pdf)]"> <xsl:variable name="p-number"> <xsl:number count="group[not(@pdf)]" level="multiple" format="1.1 " from="/workshop/body/group[@pdf='no']" /> </xsl:variable> <g> <p> <xsl:value-of select="$p-number" /> <xsl:value-of select="./reference" /> </p> <xsl:apply-templates /> </g> </xsl:template> <xsl:template match="group[@pdf='no']"> <xsl:apply-templates select="group" /> </xsl:template> <xsl:template match="reference"> </xsl:template> </xsl:stylesheet> Incorrect result obtained: --------------------------------- ?xml version="1.0" encoding="UTF-8"?>
<r>
<g>
<p>1 a/b</p> <g>
<p>1.1 a/b/c</p> <g>
<p>1.1.1 a/b/c/d</p> </g>
<g>
<p>1.1.2 a/b/c/e</p> </g>
</g>
</g>
<g>
<p>2 a/f</p> <g>
<p>2.1 a/f/g</p> <g>
<p>2.1.1 a/f/g/h</p> </g>
</g>
<g>
*<p>2.1 a/f/i/j</p>*</g> </g> </r> I would like to obtain 2.2 for a/f/i/j element instead of 2.1. I could not figure out how to do it. Could you please tell me how to do it with xsl:number or point me to another solution ? Regards -- Jean-Frangois MAUREL PIMECA http://www.pimeca.com
|

Cart



