0

是否有一些干净的方法可以知道何时修改了 DOM 文档的某些内容,而不必递归到其节点并散列大量数据?

我会避免生成完整的 XML 字符串(请参阅 @AdriaanKoster 的回复)

正如@mthmulders 指出的那样,使用监听器或任何“聪明”似乎是正确的方法。

我在这里找到了一个有趣的 SO 帖子,也许是答案?

任何提示?

谢谢

4

2 回答 2

1

您可以检查您的Document也是否是EventTarget. 如果是这样,您可以使用该addEventListener方法来处理任何事件。例如,如果正在处理的事件是MutationEvent,您可能会获得有关文档修改的信息。

于 2013-03-27T08:12:53.460 回答
1

我通过将 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 时给调用代码增加异常处理的负担。这意味着无法正确检测到无法成功转换的文档更改。

于 2013-03-27T10:47:15.640 回答