gpt4 book ai didi

javascript - 使用 javascript 相对 xpath 到绝对 xpath

转载 作者:行者123 更新时间:2023-12-02 23:58:31 31 4
gpt4 key购买 nike

是否可以使用 javascript 获取给定 dom 节点的相对路径的绝对 xpath?

我发现的最接近的是获取节点的 xpath:Get Xpath from the org.w3c.dom.Node

此外,我还获得了没有唯一标识符的节点的相对 xpath。有什么想法可以解决这个问题吗?

例如,对于:

 <p>DUKE SOLINUS</p>
<div>
<p>AEGEON</p>
</div>

对于选定的单词“DUKE”和“AEGEON”,我分别得到 xpaths“/p[1]”和“/div[1]/p[1]”,当传递给 document.evaluate 函数时两者的计算结果均为同一节点“DUKE SOLINUS”。所以,我只有这些相对 xpath,并且没有节点。我想要的是评估这些相对 xpath 以纠正节点,即本例中的两个不同节点(DUKE SOLINUS 和 AEGEON)。

更具体地说,xpath 取自 json 注释对象:http://docs.annotatorjs.org/en/v1.2.x/annotation-format.html

如有任何帮助,我们将不胜感激!非常感谢!

最佳答案

此函数将找到给定节点的基数绝对xpath。如果任何节点的顺序发生变化,或者添加或删除节点,那么这将不起作用。但对于静态内容来说应该没问题。

function getXpathOfNode(domNode,bits) {
// uses cardinality. Will not work if any nodes are added/moved/removed in the DOM. Fine for static stuff.
bits = bits ? bits : [];
var c = 0;
var b = domNode.nodeName;
var p = domNode.parentNode;

if (p) {
var els = p.getElementsByTagName(b);
if (els.length > 1) {
while (els[c] !== domNode) c++;
b += "[" + (c+1) + "]";
}
bits.push(b);
return getXpathOfNode(p, bits);
}

//bits.push(b); // this is #document. Probably dont need it.
return bits.reverse().join("/");
}
// testing
var xp = getXpathOfNode(document.getElementById("pickme"));
var r = document.getElementById("result");
r.innerHTML = "the xpath is " + xp + "<br>";
var result = document.evaluate(xp, document, null, XPathResult.ANY_TYPE, null);
r.innerHTML += "the chosen node contains - " + result.iterateNext().innerHTML;
<div>
<div>junk</div>
<span>irrelevant</span>
<div>pointless
<div>
<div id="pickme">this is the test node</div><span>don't read this</span></div>
<br><br>
<div id="result"></div>
</div>

关于javascript - 使用 javascript 相对 xpath 到绝对 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36321052/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com