我要读和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解析器,而不是试图迎合其弱点。) –