Re: [xsl] (simple?) xpath question

Subject: Re: [xsl] (simple?) xpath question
From: Evan Lenz <evan@xxxxxxxxxxxx>
Date: Fri, 29 Aug 2008 13:14:36 -0700
A better approach is to use the self axis along with true name tests:

//*[self::a or self::c]

The name() function will work too, but it will also select <a> and <c> elements regardless of what their namespace is (and it may give inconsistent results in such cases depending on whether prefixes are used in the input or not). An actual name test in the expression, indicating that you're only interested in <a> and <c> elements that aren't in a namespace, is the way to go.

Evan


mozer wrote:
Mark,

//*[name() = 'a' or name() = 'c']

is the right syntax

Xmlizer

On Fri, Aug 29, 2008 at 9:57 PM, mark bordelon <markcbordelon@xxxxxxxxx> wrote:
Thanks, Colin,


Although the requirements cannot assume how many levels there are between the root node and the desired node, your solution points me to something like this. Does this work?



//[name() == "a" and name() == "c"]





--- On Fri, 8/29/08, Colin Paul Adams <colin@xxxxxxxxxxxxxxxxxx> wrote:


From: Colin Paul Adams <colin@xxxxxxxxxxxxxxxxxx>
Subject: Re: [xsl] (simple?) xpath question
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Date: Friday, August 29, 2008, 12:22 PM
"Mark" == mark bordelon
<markcbordelon@xxxxxxxxx> writes:

    Mark> All *help*!    What is the best way to query
xml with xpath
    Mark> to get a disjoint nodelist? Specifically i
want to include
    Mark> just the root node alongwith a descendent
node.    XML:
    Mark> <a>   <b>     <c>
</c>  </b> </a>   XPATH:   //c
    Mark> DESIRED RESULT NODELIST: i.e. not this:
<c> </c>   but
    Mark> rather this: <a>   <c>
</c> </a>

One possibility is:

//*[name() != "b"]

It depends on your exact requirements.
--
Colin Adams
Preston Lancashire

Current Thread