【问题标题】:Export DOM Document as XML with userData as Attribute以 userData 作为属性将 DOM 文档导出为 XML
【发布时间】:2016-12-31 16:40:28
【问题描述】:

我正在处理一个带有数据的Document 对象,一些节点有与之关联的userData(使用setUserData(<key>, <value>, <handler>))。我想将文档的副本保存到 XML,并将 userData 值导出为属性。

变压器

这是我知道的输出 XML 的方式:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(<Document>);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);

但是我无法找到一种方法来连接新旧 Node 对象都存在的方法——我在挖掘 Transformer 时唯一能找到的地方是一个将节点转换为的类 DOM2TO例如。 SAX 调用 startElement(...),但如果不复制粘贴整个代码,我无法在此处更改任何内容。

用户数据处理程序

我的第二种方法是使用 UserDataHandler 与 userData 一起附加到节点。该处理程序必须提供一个名为 handle(short operation, String key, Object data, Node src, Node dst) 的方法,例如。克隆节点时。因此,可以编写一个 UserDataHandler 来检查 src 节点中的 userData 并将其作为属性添加到 dst,然后在从克隆写入 XML 之前简单地克隆 Document。 不幸的是handle(...)dst节点克隆未完成的阶段被调用:当src具有属性时,dst将指向同一个AttributeMap实例时间。因此,整个过程毫无价值,因为添加的属性也会添加到原始 Document 中,我不想这样做。

【问题讨论】:

    标签: java xml dom xerces


    【解决方案1】:

    解决了 - 我必须使用在 NODE_IMPORTED 工作的 UserDataHandler:然后使用完全克隆的 dst 节点调用 handle(...) 方法。

    但这不是一个好的解决方案,因为克隆(hrm,importing)文档会使所需空间加倍。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多