我正在使用數據處理Document
對象,其中一些節點具有與其關聯的userData(使用setUserData(<key>, <value>, <handler>)
)。我想將Document的副本保存爲XML,並將userData值作爲屬性導出。將DOM文檔導出爲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
我的第二個方法是使用一個UserDataHandler與用戶數據一起連接到節點。該處理程序必須提供一個名爲eg的方法handle(short operation, String key, Object data, Node src, Node dst)
。當節點被克隆時。因此可以編寫一個UserDataHandler來檢查userData的src
節點,並將其作爲屬性添加到dst
,然後在從克隆中寫入XML之前簡單地克隆Document。 不幸的是,handle(...)
在dst
節點克隆未完成的階段被調用:當src
具有屬性時,dst
將在此時指向相同的AttributeMap
實例。因此,整個過程毫無價值,因爲添加的屬性也會被添加到原始文檔中,我不想這樣做。