Altova Mailing List Archives>Archive Index >comp.text.xml Archive Home >Recent entries >Thread Prev - Re: Strange problem with count >Thread Next - Re: Strange problem with count Re: Strange problem with countTo: NULL Date: 8/1/2005 8:33:00 PM Another quote from the XPath 1.0 Spec, which describes this topic even more precisely: "NOTE: The ancestor, descendant, following, preceding and self axes partition a document (ignoring attribute and namespace nodes): they do not overlap and together they contain all the nodes in the document." Cheers, Dimitre Novatchev "Dimitre Novatchev" <x@y...> wrote in message news:42eee2d8$0$60338$892e7fe2@a...... > > <rob.guitar.rob@g...> wrote in message > news:1122945838.963427.304630@z...... >> Hello, >> >> My last few posts have been revolving aroung the same problem, and I >> still cant solve it and I would be really appreciate if anyone could >> spot a problem. >> >> a section of my XML goes like >> >> .... >> <parent> >> <child> >> <grandchild1> >> <grandchild2> >> <child> >> <parent> >> >> /... >> >> I need to describe a numeric link between grandchild elements and the >> child elements. >> >> I have been using count(preceding::*) to id the cells numerically: > > It is not possible to identify a node uniquely using only one axis. > >> >> >> <xsl:template select="grandchild1|grandchild2"> >> <MyID> >> Child: <xsl:value-of select="count(../preceding::*)"/> >> Grandchild: <xsl:value-of select="count(./preceding::*)"/> >> </MyID> >> </xsl:template> >> >> >> However, the first grandchild1 element that runs this has the same >> count as the child element. (35 and 35). The second grandchild element >> that runs is incremented by one as expected, 35 and 36, meaning it >> seems 1 too low. The obvious problem is the first counts are returned >> the same, negating the idea of unique numeric ID's. >> >> Are these results to be expected? > > Yes. > > The "preceding" and "ancestor" axis are non-overlapping and can be thought > of as the X and Y axis in a two-dimensional space (plane). > > To quote the XPath 1.0 spec: > > "the preceding axis contains all nodes in the same document as the context > node that are before the context node in document order, excluding any > ancestors and excluding attribute nodes and namespace nodes" > > http://www.w3.org/TR/xpath#axes > > >> I do not know why/how the ../ and ./ >> return the same value (surely the ../preceding has come back a node in >> that first case and therefore should be -1 of the grandchild1?) >> >> I know a simple fix is just to add one onto all of the grandchilds >> (count(./preceding::*)+1) but it seems slight dodgey, i.e. a fix to a >> potential problem in my XSL. >> >> I would really appreciate is anyone could help me understand why this >> does not work, so that I can fix it properly. > > An unique ID can be constructed taking both the "ancestor" and "preceding" > axis into account and generating a *pair* of numbers. > > Another way is to use xsl:number > > > Cheers, > Dimitre Novatchev > >> >> Any help will again be most appreciated. >> >> Thanks, Rob. >> > > | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
