簡體   English   中英

使用userData作為屬性將DOM文檔導出為XML

[英]Export DOM Document as XML with userData as Attribute

我正在處理帶有數據的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類, DOM2TO將節點轉換為例如。 SAX調用startElement(...) ,但是在這里我不能在不復制粘貼整個代碼的情況下更改任何內容。

UserDataHandler

我的第二種方法是使用UserDataHandler與userData一起附加到Node。 該處理程序必須提供一個稱為例如的方法handle(short operation, String key, Object data, Node src, Node dst) 克隆節點時。 因此,可以編寫一個UserDataHandler來檢查src節點中的userData並將其作為dst的屬性添加,然后在從克隆寫入XML之前簡單地克隆Document。 不幸的是handle(...)dst Node克隆未完成的階段被調用:當src具有屬性時, dst當時將指向同一AttributeMap實例。 因此,整個過程毫無價值,因為添加的屬性也會添加到原始文檔中,我不想這樣做。

解決了–我必須使用在NODE_IMPORTED上運行的UserDataHandler:然后使用完全克隆的dst節點調用handle(...)方法。

但是,這不是一個很好的解決方案,因為克隆(hrm, 導入 )文檔會使所需的空間增加一倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM