Subject: Re: [xsl] Unique id based on the position From: Gábor Tóth <roysy@xxxxxxxx> Date: Wed, 10 Nov 2010 13:42:52 +0000 |
Indeed, you are right, I fixed it, thanks a lot, Michael. On Wed, Nov 10, 2010 at 10:45 AM, Michael Kay <mike@xxxxxxxxxxxx> wrote: > I can't exactly work out your requirements from this, but it looks to me as > if the third component of the number should use xsl:number level="any" > rather than level="single". > > Michael Kay > Saxonica > > On 10/11/2010 09:58, Gabor Tsth wrote: >> >> Dear All, >> >> I wish to give a unique ID to an element (seg) based on his position >> within another element. The unique id should be the position of the >> div1, p and seg element. The problem is when the seg element is not >> the direct child of p element, then the xsl:number from function >> restarts the numbering. See the exact problem below in the comment of >> the output , sorry but I am not able to explain it very well. >> >> Thanks a lot, >> >> Gabor >> >> The XML fiile is this: >> >> >> <?xml-stylesheet type="text/xsl" href="IDGeneratingTest1NONAMESPACE.xsl"?> >> >> <text> >> <body> >> <div1 xml:id="ch.2" corresp="#toc.2"> >> <p> >> <seg ID=" ">econdariamente</seg> >> <seg ID=" ">Pandolfo</seg> >> <seg ID=" ">et</seg> >> <list> >> <item> >> <seg ID=" ">Bernardo</seg> >> <seg ID=" ">miei</seg> >> </item> >> </list> >> <seg ID=" ">figli</seg> >> </p> >> >> <p> >> <seg ID=" ">gli</seg> >> <unclear> >> <seg ID=" ">fermiate</seg> >> <seg ID=" ">domandate</seg> >> </unclear> >> <seg ID=" ">prima</seg> >> <seg ID=" ">diligentemente</seg> >> >> </p> >> </div1> >> </body> >> </text> >> >> The stylesheet that I am using is this: >> >> <?xml version="1.0" encoding="UTF-8"?> >> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >> version="2.0"> >> >> <xsl:template match="@*|node()|comment()|processing-instruction()" >> priority="-5"> >> <xsl:copy> >> <xsl:apply-templates >> select="@*|node()|comment()|processing-instruction()"/> >> </xsl:copy> >> <xsl:apply-templates select="//text/body/p//seg"/> >> </xsl:template> >> >> <xsl:template match="@ID"> >> <xsl:attribute name="xml:id"> >> >> <xsl:for-each >> select="ancestor::seg/ancestor::p/ancestor::div1"> >> <xsl:number from="//text/body"/>.</xsl:for-each> >> >> <xsl:for-each select="ancestor::seg/ancestor::p"> >> <xsl:number from="//text/body/div1"/>.</xsl:for-each> >> >> <xsl:for-each select="ancestor::seg"> >> <xsl:number from="//text/body/div1/p"/> >> </xsl:for-each> >> >> </xsl:attribute> >> >> </xsl:template> >> </xsl:stylesheet> >> >> >> Output: >> >> <?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" >> href="IDGeneratingTest1NONAMESPACE.xsl"?> >> <text> >> <body> >> <div1 xml:id="ch.2" corresp="#toc.2"> >> <p> >> <seg xml:id="1.1.1">econdariamente</seg> >> <seg xml:id="1.1.2">Pandolfo</seg> >> <seg xml:id="1.1.3">et</seg> >> <list> >> >> <item> >> <seg xml:id="1.1.1">Bernardo</seg> >> >> <!-- I don't want that the numbering restarts >> here, I wish to count the seg >> elements from the p element, so ideally, >> here the xml:id should be 1.1.4, and then 1.1.5 but I I see >> what is the problem but I don't find the >> trick.--> >> >> <seg xml:id="1.1.2">miei</seg> >> </item> >> </list> >> <seg xml:id="1.1.4">figli</seg> >> </p> >> >> >> <p> >> <seg xml:id="1.2.1">gli</seg> >> <unclear> >> <seg xml:id="1.2.1">fermiate</seg> >> >> <!-- The problem is again the same, the xml:id >> should 1.2.2--> >> >> <seg xml:id="1.2.2">domandate</seg> >> </unclear> >> <seg xml:id="1.2.2">prima</seg> >> >> <seg xml:id="1.2.3">diligentemente</seg> >> >> </p> >> </div1> >> </body> >> </text>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Unique id based on the po, Michael Kay | Thread | [xsl] Accessing the XML file name f, Neil Owens |
Re: [xsl] [XSLT 1.0] Q: recursively, Brandon Ibach | Date | Re: [xsl] Saxon documentation pages, Michael Müller-Hille |
Month |