Subject: Re: [xsl] XPath problem with getting all ancestors From: Jostein Austvik Jacobsen <josteinaj@xxxxxxxxx> Date: Fri, 23 Oct 2009 13:07:53 +0200 |
David/Syd: I tried replacing the value-of with <xsl:number level="any" count="content"/>, but it returned nothing. I'm sure I'm using it wrong though so I'll have myself a read on xsl:number. Syd: Sorry about the misplaced match. I tried it myself now and actually got the same as you. Syd/Michael: I'll try to strip down my stylesheet to localize the problem further, then I'll post it back here. Thanks Jostein 2009/10/23 Michael Kay <mike@xxxxxxxxxxxx>: > > My guess (and it's a completely wild one) is that you aren't applying > templates to the note element in the source tree as you have shown it, but > to a copy of the note element in some smaller tree, probably a tree rooted > at the para element. > > To confirm that we would need to see more of the stylesheet. Or, within the > match="note" template, do > > <xsl:message><xsl:copy-of select="/"/></xsl:message> > > to see what tree you are processing at the time. > > Regards, > > Michael Kay > http://www.saxonica.com/ > http://twitter.com/michaelhkay > >> -----Original Message----- >> From: Jostein Austvik Jacobsen [mailto:josteinaj@xxxxxxxxx] >> Sent: 23 October 2009 11:27 >> To: xsl-list >> Subject: [xsl] XPath problem with getting all ancestors >> >> I've got a document like this: >> >> <?xml version="1.0" encoding="utf-8"?> >> <document> >> <article> >> <meta> >> <title>Title</title> >> </meta> >> <content> >> <headline>Headline</headline> >> <para> >> <note id="1">text</note> >> </para> >> </content> >> </article> >> </document> >> >> And in a template for the note tags I'm trying to use the >> ancestor axis to get the list [ para , content , article ]. >> However, I only seem to get [ para ] with ancestor::* and [ para , "" >> ] with ancestor::node(). >> When I test it like this: >> >> <xsl:template match="note"> >> ancestors="<xsl:value-of select="count(ancestor::*)"/>" >> preceding="<xsl:value-of select="count(preceding::*)"/>" >> contentNum="<xsl:value-of >> select="count(preceding::content)"/>" >> </xsl:template match> >> >> ...I get ancestors="1", preceding="2" and contentNum="0" as output. >> >> What I actually need to do is to count the number of content >> nodes preceding the current note (relevant for the input XML >> note numbering scheme). I did so earlier in the document (for >> referencing the actual >> notes) when matching document like this: >> >> <xsl:template match="document"> >> (...) >> <xsl:for-each select="//note"> >> <note> >> <xsl:attribute name="id"><xsl:value-of >> select="count(ancestor::content/preceding::content)"/></xsl:attribute> >> <p><xsl:apply-templates/></p> >> </note> >> </xsl:for-each> >> (...) >> </xsl:template> >> >> So here I get access to all of the notes ancestors. In >> retrospect I could probably have used >> select="count(preceding::content)" instead, but still... >> >> How come that I cannot access the notes ancestors from my >> note template? >> >> Regards >> Jostein
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] XPath problem with gettin, Michael Kay | Thread | Re: [xsl] XPath problem with gettin, Jostein Austvik Jaco |
RE: [xsl] XPath problem with gettin, Michael Kay | Date | Re: [xsl] XPath problem with gettin, Jostein Austvik Jaco |
Month |