使用javascript实现相对xpath到绝对xpath
如果给定dom节点的相对xpath,是否可以使用javascript获得绝对xpath 我找到的最接近的方法是获取节点的xpath: 此外,我得到了没有唯一标识符的节点的相对XPath。有没有办法解决这个问题 例如:使用javascript实现相对xpath到绝对xpath,javascript,dom,xpath,Javascript,Dom,Xpath,如果给定dom节点的相对xpath,是否可以使用javascript获得绝对xpath 我找到的最接近的方法是获取节点的xpath: 此外,我得到了没有唯一标识符的节点的相对XPath。有没有办法解决这个问题 例如: <p>DUKE SOLINUS</p> <div> <p>AEGEON</p> </div> 杜克·索里努斯 爱琴海 对于选定的单词“DUKE”和“AEGEON”,我分别得到xpath“/p[1]
<p>DUKE SOLINUS</p>
<div>
<p>AEGEON</p>
</div>
杜克·索里努斯
爱琴海
对于选定的单词“DUKE”和“AEGEON”,我分别得到xpath“/p[1]”和“/div[1]/p[1]”,当传递到document.evaluate函数时,这两个词都计算到同一个节点“DUKE SOLINUS”。所以,我只有这些相对XPath,没有节点。我想要的是评估这些相对XPath以更正节点,即本例中的两个不同节点(DUKE SOLINUS和AEGEON)
更具体地说,XPath取自json注释对象:
任何帮助都将不胜感激!
非常感谢 此函数将查找到给定节点的基数绝对xpath。如果任何节点的顺序发生更改,或者节点被添加或删除,则此操作将不起作用。但对于静态内容,它应该是好的
函数getXpathOfNode(domNode,位){
//使用基数。如果在DOM中添加/移动/删除任何节点,则不起作用。适用于静态内容。
位=位?位:[];
var c=0;
var b=domNode.nodeName;
var p=domNode.parentNode;
如果(p){
var els=p.getElementsByTagName(b);
如果(els.length>1){
同时(ELS [C]!= = DMONNORT)C++;
b+=“[”+(c+1)+“]”;
}
位推送(b);
返回getXpathOfNode(p,位);
}
//bits.push(b);//这是#文档。可能不需要它。
返回bits.reverse().join(“/”);
}
//测试
var xp=getXpathOfNode(document.getElementById(“pickme”);
var r=document.getElementById(“结果”);
r、 innerHTML=“xpath是“+xp+””; var result=document.evaluate(xp,document,null,XPathResult.ANY_TYPE,null); r、 innerHTML+=“所选节点包含-”+result.iterateNext().innerHTML代码>
废旧物品
无关的
无意义的
这是测试点别看这个
这可能是一个问题,无论你给出什么优雅的答案,我都可以构建一个失败的场景。为每个节点分配ID是可行的,但这很糟糕。为什么需要绝对xpath?也许有一个解决方案你没有。非常感谢你的回答!我害怕听到这个,但我仍然希望会有答案。我有一个页面上所选文本的相对路径(我也有该文本-不是特别有用),我需要用其他文本替换该文本。由于我得到的相对路径并不总是唯一的(我将用示例更新我的问题),document.evaluate函数将计算到同一个节点。非常感谢,但现在我不确定我是否正确解释了我需要什么(我再次更新了问题:))。您建议的函数接受一个节点,然后计算出其xpath。我需要的是在只有相对xpath的情况下获取节点。document.evaluate不会总是返回唯一的节点(例如在给定的示例中)。这就是为什么我认为从给定的相对XPath中获取绝对XPath可能更容易,然后使用document.evaluate。您有XPath相对的节点吗?如果是
您可以执行document.evaluate(relativePath,document.getElementById('content'),…
我不确定是否可以获得它,但我会查看它。谢谢您的建议!