是否有一些干净的方法可以知道何时修改了 DOM 文档的某些内容,而不必递归到其节点并散列大量数据?
我会避免生成完整的 XML 字符串(请参阅 @AdriaanKoster 的回复)
正如@mthmulders 指出的那样,使用监听器或任何“聪明”似乎是正确的方法。
我在这里找到了一个有趣的 SO 帖子,也许是答案?
任何提示?
谢谢
您可以检查您的Document
也是否是EventTarget
. 如果是这样,您可以使用该addEventListener
方法来处理任何事件。例如,如果正在处理的事件是MutationEvent
,您可能会获得有关文档修改的信息。
我通过将 Document 序列化为 String 并获取其哈希码来完成此操作。我认为这不是一个非常昂贵的手术。它是这样的:
private int calculateHashCode(org.w3c.dom.Document document) {
try {
DOMSource source = new DOMSource(document);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(stringWriter);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty("indent","no");
transformer.transform(domSource, result);
return stringWriter.toString().hashCode();
}
catch(TransformerException e) {
return -1;
}
}
如果出现异常,我将返回 -1,因为我不想在确定 hashCode 时给调用代码增加异常处理的负担。这意味着无法正确检测到无法成功转换的文档更改。