目标是读取 xml 文件并写入新的 xml 文件,同时保留换行符。我们需要 Document 对象来执行其他 xml 任务。
说 source.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Code><![CDATA[code line1
code line 2
code line 3
code line 4]]></Code>
现在目标应该与代码元素中的换行符看起来相同。但相反,它忽略了换行符并将其变为一行。
对于写作,我使用以下方法:
public static void writeFile(Document xml, File writeTo)
{
try
{
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
DOMSource source = new DOMSource(xml);
StreamResult result = new StreamResult(writeTo);
transformer.transform(source, result);
}
catch(TransformerException e)
{
System.out.println("Couldn't write file " + writeTo);
e.printStackTrace();
}
}
Document xml 是使用 DocumentBuilder 中的 Parse(File) 方法获得的。大致如下:
File file; // a list of files is recursively obtained from a given folder.
DocumentBuilderFactory documentBuilderfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = documentBuilderfactory.newDocumentBuilder();
Document xml = builder.parse(file);
builder.parse 似乎正在丢失 Code 元素的 CDATA 中的换行符。
我们如何保留换行符?我是 Java API 的新手。