Subject: RE: [xsl] Using position predicate in XPath string within selectS ingleNode DOM method From: Pieter Reint Siegers Kort <pieter.siegers@xxxxxxxxxxx> Date: Thu, 25 Nov 2004 09:10:41 -0600 |
Wow! So it is TRUE! Thanx for posting this Matthieu - I was suspecting that but didn't believe it was true - bad news for the developers at Microsoft I would say! Following the spec seems a very difficult thing to do for them, even the base they don't get it right. They want all to adhere to the 0 based indexes, arrays, etc. but they seem to have forgotten about what VB used to have, not very long ago: base 1! Let's hope they listen and read better in the future... I'm about to enter XQuery 1.0 support in .NET 2.0 but sure hope they didn't make another messy interpretation of the spec! Cheers, <prs/> -----Original Message----- From: Matthieu Ricaud [mailto:matthieu.ricaud@xxxxxxx] Sent: Thursday, November 25, 2004 3:54 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Using position predicate in XPath string within selectSingleNode DOM method 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: [xsl] 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: [xsl] 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: [xsl] 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Using position predicate , Matthieu Ricaud | Thread | Re: [xsl] Using position predicate , David Carlisle |
Re: [xsl] Gestalt - a new XSLT 2.0 , M. David Peterson | Date | Re: [xsl] Preseving character entit, David Carlisle |
Month |