什么是唯一标识HTML文档中所有DOM节点的方法。为了说明我的意思,这是一个(虚构的)例子:
我真的对如何唯一地识别DOM节点感兴趣,以便脚本Y可以识别它并操纵它。优选地,它也应该与文本节点一起工作。我可能正在考虑使用XPath,但我不确定如何为任何给定节点生成唯一 XPath。
答案 0 :(得分:6)
您应该能够通过从节点向后工作向后工作来确定一个唯一的XPath,并跟踪您所在的节点以及它的兄弟节点,这样您就可以得到类似的内容:
/a[1]/b[2]/c[101]/text()
这是第二个C
节点下的第101个B
节点等。因此,这是一个唯一路径,可以参考原始文档复制
答案 1 :(得分:1)
您可能需要查看XPathGen https://github.com/amouat/XPathGen
它将为给定的DOM节点创建/node()[1]/node()[1]
形式的唯一XPath。但是,XPath存在一些问题,即非合并文本节点和“prolog”节点,这些节点不能仅使用XPath进行唯一标识。例如,如果您在DOM中有以下文档:
<a>b</a>
添加一个文本节点成为:
<a>bc</a>
节点b和c的XPath将是相同的,但您仍将拥有单独的DOM节点(除非您在文档上调用normalize)。如果需要处理这种情况,则需要存储文本节点的偏移量和长度。
答案 2 :(得分:0)
嗯,导致单个节点的XPath表达式应该是唯一的。 “如何为任何给定节点生成唯一的XPath”是什么意思?
答案 3 :(得分:0)
沿XPath轴的序数子位置。节点排序很强,所以说:
小孩5的小孩4的小孩3的孩子1。
应该这样做。