[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] toc with number with element selection
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|