是否有一些干净的方法可以知道DOM文档的某些内容何时被修改,而不必递归到其节点并散列大量数据?
我会避免生成完整的XML字符串(请参阅@AdriaanKoster'响应)
正如@mthmulders指出的那样,使用听众或任何“聪明”,似乎是正确的方式。
我发现了一篇有趣的SO帖here,也许是答案?
任何提示?
由于
答案 0 :(得分:1)
您可以检查Document
是否也是EventTarget
的实例。如果是这样,您可以使用addEventListener
方法处理任何事件。例如,如果正在处理的事件是MutationEvent
,您可能会获得有关文档修改的信息。
答案 1 :(得分:1)
我通过将Document序列化为String并获取其hashcode来完成此操作。我认为这不是一个非常昂贵的操作。它是这样的:
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时用异常处理来加重调用代码。这意味着无法正确检测到无法成功转换的文档更改。