xsl-list
[Top] [All Lists]

RE: Using position predicate in XPath string within selectS ingleNode DOM method

2004-11-25 08:10:41
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(_dot_)ricaud(_at_)cned(_dot_)fr] 
Sent: Thursday, November 25, 2004 3:54 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_dot_)siegers(_at_)elnorte(_dot_)com]
Envoyé : jeudi 25 novembre 2004 00:17
À : xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_dot_)ricaud(_at_)cned(_dot_)fr]
Sent: Wednesday, November 24, 2004 8:16 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_dot_)Batsis(_at_)eurodyn(_dot_)com]
Envoye : mercredi 24 novembre 2004 13:04 A : 
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--