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>
--~--