[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

Subject: RE: Using position predicate in XPath string within selectSingleNode DOM method
From: "Matthieu Ricaud" <matthieu.ricaud@xxxxxxx>
Date: Thu, 25 Nov 2004 10:54:16 +0100
selectsinglenode position
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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.