[英]Serializing Java DOM Document to XML: Add CData Elements
我正在使用SAX解析器構造XML DOM文檔。 我已經編寫了處理startCDATA
和endCDATA
方法的方法,並在endCDATA
方法中構造了一個新的CDATA部分,如下所示:
public void onEndCData() {
xmlStructure.cData = false;
Document document = xmlStructure.xmlResult.document;
Element element = (Element) xmlStructure.xmlResult.stack.peek();
CDATASection section = document.createCDATASection(xmlStructure.stack.peek().characters);
element.appendChild(section);
}
當我將此序列化為XML文件時,我使用以下行來配置轉換器:
transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "con:setting");
永遠不會沒有<![CDATA[
標記]出現在我的XML文件中,而所有backets都轉義為>
和<
,對於其他工具來說這沒問題,但對於需要讀取文件的人來說也是一個問題。 我很肯定“ con:setting”標簽是正確的。 那么名稱空間前綴可能有問題嗎?
這個問題還表明,不可能省略CDATA_SECTION_ELEMENTS屬性,並且通常在不轉義數據的情況下序列化所有CDATA節點。 該信息是否正確,或者答案的作者可能還不知道其他方法?
更新:似乎我的代碼有誤。 當使用document.createCDATASection()
函數,然后用序列化它的輸出CDATA標簽變壓器的代碼,即使不使用的CDATA_SECTION_ELEMENTS
在變壓器特性。
在這條線
transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "con:setting");
嘗試將"con:setting"
替換為"{http://con.namespace/}setting"
使用適當的名稱空間
您可以嘗試使用DOM原生的“加載和保存”機制 ,而不是使用no-op Transformer
來序列化DOM樹,該機制應保留DOM樹中的CDATASection
節點,並將其作為CDATA節寫入到所得XML中。
DOMImplementationLS ls = (DOMImplementationLS)document.getImplementation();
LSOutput output = ls.createLSOutput();
LSSerializer ser = ls.createLSSerializer();
try (FileOutputStream outStream = new FileOutputStream(...)) {
output.setByteStream(outStream);
output.setEncoding("UTF-8");
ser.write(document, output);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.