如何唯一地标识HTML文档中的所有DOM节点。为了说明我的意思,这里有一个(虚构的)例子:
脚本X从document.html.
中是哪个节点
我非常感兴趣的是如何唯一地标识DOM节点,以便脚本Y能够识别和操作它。最好,它也应该与文本节点一起工作。我可能在考虑XPath,但我不知道如何为任何给定的节点生成唯一的XPath。
发布于 2010-01-15 04:16:47
您应该能够确定唯一的XPath,方法是从节点向根节点反向工作,并跟踪您所在的节点,以及它的同级节点,这样您就可以得到以下内容:
/a[1]/b[2]/c[101]/text()
因此,这是第二个B
节点下的101B
节点,因此,这是一个唯一的路径,可以引用原始文档进行复制。
发布于 2012-01-06 04:18:18
你可能想看看XPathGen https://github.com/amouat/XPathGen
它将为给定的DOM节点创建表单/node()[1]/node()[1]
的唯一/node()[1]/node()[1]
。然而,XPath也存在一些问题,即非合并的文本节点和"prolog“节点,这些节点不能仅用XPath进行唯一标识。例如,如果DOM中有以下文档:
<a>b</a>
并添加一个文本节点以成为:
<a>bc</a>
节点b和c的XPath将是相同的,但是仍然有单独的DOM节点(除非在文档上调用正常化)。如果需要处理这种情况,则需要存储文本节点的偏移量和长度。
发布于 2010-01-15 04:12:11
那么,导致单个节点的XPath表达式应该是唯一的。您所说的“如何为任何给定节点生成唯一的XPath”是什么意思?
https://stackoverflow.com/questions/2071295
复制