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 countTo: NULL Date: 8/2/2005 3:21:00 AM Ah, that makes real sense. Thanks! That last quote was a good one. Thanks again, Rob Dimitre Novatchev wrote: > 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 | |||
|
