Subject: Re: [xsl] XPath Predicate Nuance From: "David P. Nesbitt" <david_p_nesbitt@xxxxxxxxx> Date: Wed, 6 Oct 2004 18:08:22 -0700 (PDT) |
Ken, Thanks a bunch for the help. I really appreciate it. Regards, Dave --- "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> wrote: > At 2004-10-06 15:13 -0700, David P. Nesbitt wrote: > >I am getting some unexpect results from an XPath > >predicate. > > Yours is a common mistake made by my students who > have looked at XPath > before taking a class. > > >I am trying to load the unique values of > >an element into a variable. The XML file is > grouped > >by this element. I want to treat the absence of > the > >element as a value as well (the "null" value if you > >will). However, I can't get the XPath predicate to > >filter out multiple "null" values. > > You are forgetting that "preceding-sibling::" looks > at *all* preceding > siblings, not just the closest preceding sibling. > > >I am including below a data file, stylesheet, > expected > >output and observed output. > > Thank you, that made it easy to modify to illustrate > the fix. > > >If you can see anything > >wrong, I would most appreciate your assistance. > > Use a predicate "[1]" to talk about the immediately > preceding sibling, not > *all* preceding siblings. > > I hope this helps. > > .................... Ken > > p.s. your use of boolean() on a node set is > redundant ... the processor is > already converting both operands to boolean when the > operator is boolean. > > T:\ftemp>type nesbitt.xml > <a> > <b> > <c>123</c> > <d>000</d> > </b> > <b> > <c>123</c> > <d>000</d> > </b> > <b> > <d>000</d> > </b> > <b> > <d>000</d> > </b> > <b> > <c>456</c> > <d>000</d> > </b> > <b> > <c>456</c> > <d>000</d> > </b> > <b> > <c>789</c> > <d>000</d> > </b> > </a> > > T:\ftemp>type nesbitt.xsl > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:fo="http://www.w3.org/1999/XSL/Format"> > <xsl:output method="text"/> > <xsl:template match="a"> > <xsl:variable name="unique-cs" > select="/a/b[(not(preceding-sibling::b) or > (not(c) and preceding-sibling::b[1]/c) > or > (c and > not(c=preceding-sibling::b[1]/c)))]"/> > <xsl:for-each select="$unique-cs"> > <xsl:value-of select="c"/> > <xsl:text> > </xsl:text> > </xsl:for-each> > </xsl:template> > </xsl:stylesheet> > > T:\ftemp>saxon nesbitt.xml nesbitt.xsl > 123 > > 456 > 789 > > T:\ftemp> > > -- > Upcoming publicly-subscribed XSL delivery: Helsinki > Oct 18-20,2004 > World-wide on-site corporate, govt. & user group > XML/XSL training. > G. Ken Holman > mailto:gkholman@xxxxxxxxxxxxxxxxxxxx > Crane Softwrights Ltd. > http://www.CraneSoftwrights.com/s/ > Box 266, Kars, Ontario CANADA K0A-2E0 > +1(613)489-0999 (F:-0995) > Male Breast Cancer Awareness > http://www.CraneSoftwrights.com/s/bc > Legal business disclaimers: > http://www.CraneSoftwrights.com/legal > > _______________________________ Do you Yahoo!? Declare Yourself - Register online to vote today! http://vote.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XPath Predicate Nuance, G. Ken Holman | Thread | [xsl] An XSLT stylesheet does not h, raven |
Re: [xsl] XPath Predicate Nuance, G. Ken Holman | Date | [xsl] Ampersand in attributes, Nestor Boscan |
Month |