Вот простая функция JS, чтобы сделать это. Он использует только previousSibling, nodeType и parentNode, поэтому он должен быть переносимым на другие языки. Тем не менее, результат не читается (для людей), и он не будет особенно устойчивым перед лицом изменений страницы.
По моему опыту, XPath более полезен, если написан от руки. Тем не менее, вы, безусловно, можете создать алгоритм, который будет генерировать более приятные (если, возможно, более медленные) результаты.
function getXPath(node)
{
if(node == document)
return "/";
var xpath = "";
while (node != null && node.nodeType != Node.DOCUMENT_NODE)
{
print(node.nodeType);
var pos = 1, prev;
while ((prev = node.previousSibling) != null)
{
node = prev
pos++;
}
xpath = "/node()[" + pos + "]" + xpath;
node = node.parentNode;
}
return xpath;
}