2010年7月7日 星期三

將 DOMSource 匯入 外部DTD

本次專題在 XML 的存取與修改上,是使用 TransformerFactory 的套件,而該套件的 Transformer 物件內含的 transform(Source source ,Result  result) 轉換函數,在 source 為 DOMSource 時,是無法順利寫入 外部DTD 。因為光是使用 DOMSource內的 setSystemId() 來進行設定,是無法真正將 外部DTD置入,故需要利用 Transformer 物件內的 setOutputProperty(String name,String value) 來強制 DOMSource變更設定。

TransformerFactory transformerfactory=TransformerFactory.newInstance();
//產生 TransformerFactory 物件
Transformer transformer;
//建立 Transformer物件
OutputKeys outputkey;
//建立控制 Transformer的物件
StreamResult result = new StreamResult(System.out);
//建立輸出源
DOMSource source;
//建立輸入源

DocumentBuilderFactory documentbuilderfactory
                                                 =DocumentBuilderFactory.newInstance();
//產生DocumentBuilderFactory 物件
DocumentBuilder documentbuilder
                                                 =documentbuilderfactory.newDocumentBuilder();
//利用 DocumentBuilderFactory 產生DocumentBuilder物件

Document document;
//建立 Document 物件

transformer=transformerfactory.newTransformer();
//利用 TransformerFactory 產生 Transformer物件

document=documentbuilder.parse(File);
//將檔案載入

source=new DOMSource(document);
//將 Document 文件 存放至輸入源

transformer.setOutputProperty(outputkey.DOCTYPE_SYSTEM,
                                                     document.getDoctype().getSystemId());
//強制指定 DOMSource 內的 SystemId 為 Document 文件 內的 SystemId

transformer.transform(source, new StreamResult(new File(輸出檔名)));
//將 Document 文件內容寫入至新的檔案內

經過上述設定,就可以將 Document 文件內的 外部DTD 成功寫入新的 XML 檔案內。至於如何使用全新的 Document 文件來進行寫入檔案的方法,則可配合先前的文章 產生具有 外部DTD 的 Document 文件 一起完成。

參考資料:

沒有留言:

張貼留言