我要讀和xml文件,做一些修改,並把它複製到另一個位置。我還必須保留德文特殊字符,並將空標籤保持原樣(防止它們成爲自閉標籤)。爲了防止自動關閉標籤,我使用的Xerces庫,如鏈接: preventing empty xml elements are converted to self closing elements處理XML文件(JAVA)
在我的應用程序,如果我在XML的變化被忽略,代碼如下:
public static void main(String args[]) throws Exception {
InputStream inputStream= new FileInputStream(new File("D:\\qwe.xml"));
Reader reader = new InputStreamReader(inputStream,"ISO-8859-1");
InputSource is = new InputSource(reader);
is.setEncoding("ISO-8859-1");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
doc.setXmlStandalone(true);
File file = new File ("D:\\qwerty.xml");
XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(new FileOutputStream(file));
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1") ;
transformer.transform(new DOMSource(doc), new StAXResult(writer));
}
在源文件中的第一行是
<?xml version="1.0" encoding="UTF-8"?>
的問題是在目標文件,qwerty.xml,其中編碼=「UTF-8」是REM Oved的。在源文件中,儘管編碼是UTF-8,但由於德文字符,我必須將其設置爲「ISO-8859-1」。我想保留第一行作爲原件,保留空標籤(不是自閉標籤),並保留德文字符。我的代碼成功地只做第二和第三件事。
XmlStreamWriter是我發現,保持空標籤,因爲它們是(我不想在自動關閉的標籤轉換它們)的唯一途徑。這是我使用它的唯一原因。 –
好吧,如果你想讓XmlStreamWriter進行序列化,那麼你必須告訴它使用什麼編碼。 (你有沒有說爲什麼你不想自動關閉的標籤。如果接收應用程序無法處理他們,那麼你的整個系統是非常脆弱的。重寫它使用符合的XML解析器,而不是試圖迎合其弱點。) –