469,572 Members | 1,718 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,572 developers. It's quick & easy.

finding the XPath of a node

Hi all,

I'm wondering if there is a function that will return the xpath to a
specific node given its context node. Essentially, I want the reverse
of the document.evaluate functionality. I've seen examples where
people build up the xpath themselves by walking the DOM, but I thought
there has to be a better way. I've included a simple example of this,
based on code from the Solvent project at MIT. This code works
reasonably well, but can't always narrow down to a specific node when
the node doesn't have an id assigned.

Thanks!
Jeff

function getXPath(node, doc) {
var xpath = "";

var namespace = node.ownerDocument.documentElement.namespaceURI;
var prefix = namespace ? "x:" : "";

var node2 = node;
for(var i=0; node2 && node2 != doc; i++) {
var tag = node2.tagName.toLowerCase();
var id = node2.id;
var className = node2.className;

var segment = prefix + tag;

if (id && id != "") {
xpath = "//" + segment + '[@id="' + id + '"]' + xpath;
break;
}

xpath = "/" + segment + xpath;

node2 = node2.parentNode;
}

return xpath;
}

Mar 18 '07 #1
3 2119
Jeff wrote:
I'm wondering if there is a function that will return the xpath to a
specific node given its context node. Essentially, I want the reverse
of the document.evaluate functionality. I've seen examples where
people build up the xpath themselves by walking the DOM, but I thought
there has to be a better way.
There is nothing like "the XPath" to a node, there are usually various
XPath expressions possible. If you want an XPath expression selecting a
node I am sure there isn't a W3C DOM method doing that, you need to
write your own code walking the DOM respectively using XPath to build up
a path.

--

Martin Honnen
http://JavaScript.FAQTs.com/
Mar 18 '07 #2
On Mar 18, 11:06 am, Martin Honnen <mahotr...@yahoo.dewrote:
Jeff wrote:
I'm wondering if there is a function that will return the xpath to a
specific node given its context node. Essentially, I want the reverse
of the document.evaluate functionality. I've seen examples where
people build up the xpath themselves by walking the DOM, but I thought
there has to be a better way.

There is nothing like "the XPath" to a node, there are usually various
XPath expressions possible. If you want an XPath expression selecting a
node I am sure there isn't a W3C DOM method doing that, you need to
write your own code walking the DOM respectively using XPath to build up
a path.
And that's what the code I pasted does. It just seems like it would
be a common-enough task that there would be a more standard way of
doing it.

I don't really care if the function is built-in, although it seems
like there are some common "types of xpaths" that people would want
(using tag names only, tags [numbers], etc.).

Maybe there's a library that has this functionality?

-Jeff

Mar 18 '07 #3
"Jeff" <je************@gmail.comwrote in message
news:11**********************@l77g2000hsb.googlegr oups.com...
On Mar 18, 11:06 am, Martin Honnen <mahotr...@yahoo.dewrote:
>Jeff wrote:
I'm wondering if there is a function that will return the xpath to a
specific node given its context node. Essentially, I want the reverse
of the document.evaluate functionality. I've seen examples where
people build up the xpath themselves by walking the DOM, but I thought
there has to be a better way.

There is nothing like "the XPath" to a node, there are usually various
XPath expressions possible. If you want an XPath expression selecting a
node I am sure there isn't a W3C DOM method doing that, you need to
write your own code walking the DOM respectively using XPath to build up
a path.

And that's what the code I pasted does. It just seems like it would
be a common-enough task that there would be a more standard way of
doing it.

I don't really care if the function is built-in, although it seems
like there are some common "types of xpaths" that people would want
(using tag names only, tags [numbers], etc.).

Maybe there's a library that has this functionality?
I believe jQuery possesses this ability. Unless I have misunderstood the requirement.

http://docs.jquery.com/Selectors

-Lost
Mar 19 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Tjerk Wolterink | last post: by
4 posts views Thread by Helmut Dirtinger | last post: by
6 posts views Thread by JonQuark | last post: by
4 posts views Thread by Andreas Håkansson | last post: by
2 posts views Thread by John A Grandy | last post: by
2 posts views Thread by Mark Fox | last post: by
9 posts views Thread by David Thielen | last post: by
7 posts views Thread by dotnetnoob | last post: by
reply views Thread by suresh191 | last post: by
4 posts views Thread by guiromero | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.