finding the XPath of a node

J

Jeff

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;
}
 
M

Martin Honnen

Jeff said:
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.
 
J

Jeff

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
 
L

-Lost

Jeff said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top