使用userData作为Attribute将DOM Document导出为XML

时间:2016-08-24 13:46:14

标签: java xml dom xerces

我正在使用数据处理Document对象,一些节点具有与之关联的userData(使用setUserData(<key>, <value>, <handler>))。我想将Document的副本保存到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(...),但如果没有copyPasting整个代码,我就无法更改。

UserDataHandler

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

1 个答案:

答案 0 :(得分:1)

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

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