[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Using position predicate in XPath string within s
Hi Pieter, Thanks a lot for your proposition of finding a solution together to my problem. At the moment I was going to tell you what ITEM[1] return, I noticed it returns the SECOND <ITEM> node and not the FIRST ! And actually this is the solution of my problem ! With SelectSingleNode Method the Xpath position indice starts at 0 and not 1 like in XSL's Xpath query. That means for example : SelectSingleNode("/FORMATION[0]/EPREUVES[0]/EPREUVEAOPT[1]/OPTION[0]") select the same node as : <xsl:for-each select="/FORMATION[1]/EPREUVES[1]/EPREUVEAOPT[2]/OPTION[1]"> Everything's ok now ! exept that I'm really angry with Microsoft which did not specify this in the msdn ! But anyway, that's great !! thanks all for helping ! Matt -----Message d'origine----- De : Pieter Reint Siegers Kort [mailto:pieter.siegers@xxxxxxxxxxx] Envoyi : jeudi 25 novembre 2004 00:17 @ : xsl-list@xxxxxxxxxxxxxxxxxxxxxx Objet : RE: Using position predicate in XPath string within selectSingleNode DOM method Hi Matthieu, I put you on the wrong track. Like David told you, selecting the third element should be foo[3], not foo[.=3]. I guess I was too quick in suggesting it. So first, you need to change the line Set objNode=objXML.documentElement.SelectSingleNode("ITEM[.=2]") back into Set objNode=objXML.documentElement.SelectSingleNode("ITEM[2]") This should get you the second node element- when it works like it should. :-) Now, let's go to the root of the problem. The Xpath is correct. But I wanna know something from you. You wrote: > Curisously I get it work when writing ITEM[1] (but not for ITEM[.=1]) When writing ITEM[2] or ITEM[.=2] it doesn't work anymore ! Exactly what node element does ITEM[1] return? Just curiousity, but it may make a point here. Just to clarify, I never have used a DOM like this, I always write a stylesheet and apply it on the source XML as an XSLT. That being said, it's clear that (still) I do not have any clue why it doesn't work, but maybe we can find out together. Cheers, <prs/> -----Original Message----- From: Matthieu Ricaud [mailto:matthieu.ricaud@xxxxxxx] Sent: Wednesday, November 24, 2004 8:16 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: Using position predicate in XPath string within selectSingleNode DOM method Thanks all for your answer and interess ! David I totally agree with " ITEM[1] selects the first ITEM ITEM[.=1] selects all ITEMs with string value numerically equal to 1." It's just that I tried Pieter's suggestion ...unsuccessfully. Emmanouil "In sarissa i implement the selectSingleNode by appending '[1]' to the xpath expression then calling selectNodes. Maybe MSXML's implementation has the same flaw ;-)" I actually append '[1]' (or generaly '[n]' n>0) to my Xpath before apply the SelectSingleNode method and this precisely this '[n]' which make my parser not matching anynode ! My Xpath expression work perfectly if I put it within a <xsl:value-of> in an XSL file applied to my XML but when I put it in SelectSingleNode () within an asp page (see my last mail) it do not work... So it's not an Xpath problem, the question is why a correct Xpath expression don't work with SelectSingleNode () ? Is it a bug, an exeption ? The MSDN spec about SelectSingleNode say : "var objXMLDOMNode = oXMLDOMNode.selectSingleNode(queryString); Where queryString is a string specifying an XPath expression." Isn't "ITEM[2]" a correct XPath expression ?! (PS : I'm sure my oXMLDOMNode as 2 ITEM childrens) This question is more about DOM method implementation, so maybe it shouldn't be posted hier ? sorry if so. But anyway if someone have a solution, I'll be gratefull to him ;) Matt -----Message d'origine----- De : Emmanouil Batsis [mailto:Emmanouil.Batsis@xxxxxxxxxxx] Envoye : mercredi 24 novembre 2004 13:04 A : xsl-list@xxxxxxxxxxxxxxxxxxxxxx Objet : Re: Using position predicate in XPath string within selectSingleNode DOM method David Carlisle wrote: >do you wrap the expression in () before appending [1] (you need to) > >(/a/b/c)[1] > >will select at most 1 node > >/a/b/c[1] > >will select all c nodes that are the first child of a b. > > Now that you mention it... Cheers, Manos
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|