Subject: Re: [xsl] xpath query From: "Sean Tiley" <sean.tiley@xxxxxxxxx> Date: Fri, 18 Jan 2008 22:19:02 -0500 |
Hi Abel, No I am not the same person. Why did you think that? I was reading the thread and was trying to fully understand the requirement and solutions provided. I used the original XML to play with creating my stylesheets to see what I could do with it. Did I do something incorrect when I asked my questions in the same thread? Should I have posted a new message. Please tell me as I am new to this list and dont want to make a bad impression. I do appreciate your comments on my questions, they certainly help me get all of this straight in my head. Again thanks. Sean On Jan 18, 2008 7:56 PM, Abel Braaksma <abel.online@xxxxxxxxx> wrote: > Sean Tiley wrote: > > Hi there, > > I am still struggling with mostof this stuff, but I have a question > > related to the original data. > > > > Are you by any chance the same one as the original poster, who posted to > this list with the same subjectline and the same data (going by and > signing by the name "Senthil Nathan R")? > > > > > If I create the following stylesheet I get 100 100 output > > > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> > > <xsl:template match="ROOT"> > > <html> > > <xsl:value-of select="LEVEL2/*/*[@apply='1']"/> > > </html> > > </xsl:template> > > </xsl:stylesheet> > > > > What I am not clear on is why does this return values and not nodes? > > > > That is why the instruction is called "value-of": that means, like you > said, that it will return values, and not nodes. If you want nodes, you > must use xsl:copy-of instead. > > > Or is this really returning both nodes and I am getting the value of > > each one because of the <xsl:value-of select="..."/> expression? > > > > You are saying it right there. You are getting the "value of" ... > because of using the "value-of" instruction... ;) > > > As far as I can figure the expression ROOT/LEVEL2/*/*[@apply='1']" > > says give me the nodes that have the arrtibute apply=1 and are > > grandchildren of level2. > > > > Yes, that is precisely what the expression says. But you are mixing the > XPath expression and the XSLT instruction here. In XPath you say "give > me those nodes", then you instruct XSLT to use the value of those nodes, > and not the nodes themselves (again, that would be xsl:copy-of). > > > I kind of though to get both values I would have to do something like > > > > <xsl:template match="ROOT"> > > <xsl:for-each select="LEVEL2/*/*[@apply='1']"> > > <xsl:value-of select="."/> > > </xsl:for-each> > > </xsl:template> > > > > Sorry if this seems really trivial but it helps me to better understand. > > In XSLT 1.0, the first value of a node set was returned, which would be > "100" in your case. In XSLT 2.0 (which is what you are using), this > changed because the underlying model changed: everything is a sequence > now. The resultset of an XPath statement is a sequence of items (nodes, > text nodes, attributes, strings etc) and the value of these items is > taken, and finally these values are separated by whatever is in the > attribute "separator": > > <xsl:value-of select="(2 to 10)[. le 5]" separator=":" /> > > will output the string "2:3:4:5" (i.e., all values lower or equal to > five, separated by the colon). > > The for-each is hardly ever necessary and I believe it is often > over-used. Instead of for-each you can just as well use > xsl:apply-templates. There are, however, exceptions (notably: for-each > can work on any item type, whereas apply-templates only works on a > nodeset). Depending on what you want, you are right by your statement > that you need something to iterate over, or apply templates on the nodes > in the set. However, if you only need the first node, you can of course > use the predicate [1], or another number if you do not want the first: > > <xsl:value-of select="*[@apply='1'][1]" /> > > I think many people find this at first confusing: when do you get a node > set, when do you get one node, when do you get a sequence or a sequence > of nodes, when do you need apply-templates, when for-each or > for-each-group etc etc. Getting it straight is vital for working with > XSLT without frustration. > > > HTH, > Cheers, > -- Abel Braaksma > > -- Sean Tiley sean.tiley@xxxxxxxxx
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xpath query, Abel Braaksma | Thread | Re: [xsl] xpath query, XSL-List Owner |
Re: [xsl] xpath query, Abel Braaksma | Date | Re: [xsl] xpath query, XSL-List Owner |
Month |