Java:如何知道XML文档何时被修改

时间:2013-03-27 08:05:42

标签: java xml listener document domdocument

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

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

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

我发现了一篇有趣的SO帖here,也许是答案?

任何提示?

由于

2 个答案:

答案 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时用异常处理来加重调用代码。这意味着无法正确检测到无法成功转换的文档更改。