给定一个节点,我如何 select 文档中的等效节点?
Given a Node, how can I select the equivalent Node in a Document?
我的来电者递给我一个 org.w3c.dom.Node
和一个 org.w3c.dom.Document
作为它的 owner document。换句话说,所提供的 Node
保证在所提供的 Document
中是父级的,并且代表 Document
中的 Node
应该执行一些工作。
我现在处于需要有效克隆 Document
的位置(我需要执行修改,并且无法修改源代码。)
显然,如果我这样做,我手中的 Node
不属于克隆产生的新 Document
。我现在实际上已经失去了克隆 Document
.
中的选择
但是,我知道那个克隆文档中会有一个 Node
正好等于我手上的 Node
。我需要找到它。
除了遍历整个 Document
并在每个 isEqualNode(Node)
上调用 isEqualNode(Node)
之外,最好的方法是什么?
我想也许会有某种方式说 document.find(myUnparentedNode)
,但不存在这样的方法。
您可以生成一个描述节点在旧文档中位置的 XPath,然后将其应用于新文档。请参阅 this SO question 了解如何做到这一点。
如果您可以在克隆之前修改节点,只需给它一个不与任何其他内容(例如随机生成的)冲突的唯一属性,然后您就可以在克隆的文档中找到它。
如果它已经有一个 id,就使用它。
我的来电者递给我一个 org.w3c.dom.Node
和一个 org.w3c.dom.Document
作为它的 owner document。换句话说,所提供的 Node
保证在所提供的 Document
中是父级的,并且代表 Document
中的 Node
应该执行一些工作。
我现在处于需要有效克隆 Document
的位置(我需要执行修改,并且无法修改源代码。)
显然,如果我这样做,我手中的 Node
不属于克隆产生的新 Document
。我现在实际上已经失去了克隆 Document
.
但是,我知道那个克隆文档中会有一个 Node
正好等于我手上的 Node
。我需要找到它。
除了遍历整个 Document
并在每个 isEqualNode(Node)
上调用 isEqualNode(Node)
之外,最好的方法是什么?
我想也许会有某种方式说 document.find(myUnparentedNode)
,但不存在这样的方法。
您可以生成一个描述节点在旧文档中位置的 XPath,然后将其应用于新文档。请参阅 this SO question 了解如何做到这一点。
如果您可以在克隆之前修改节点,只需给它一个不与任何其他内容(例如随机生成的)冲突的唯一属性,然后您就可以在克隆的文档中找到它。
如果它已经有一个 id,就使用它。