gpt4 book ai didi

Java Dom4j SAXReader 和 XMLWriter 导致多个换行

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:39 25 4
gpt4 key购买 nike

我需要读取一个 XML 文件(如果存在 - 如果不存在,那么我将创建该文件),修改一些标签并将 xml 写回。我正在这样做

    InputStream in = new FileInputStream(userFile);
SAXReader reader = new SAXReader();
Document document = reader.read(in);

Element root = document.getRootElement();
...

并用

回写
    FileUtils.writeByteArrayToFile(userFile, getFormatedXML(document).getBytes());

...

private String getFormatedXML(Document doc) {
try {
String encoding = doc.getXMLEncoding();

if (encoding == null)
encoding = "UTF-8";

Writer osw = new StringWriter();
OutputFormat opf = new OutputFormat(" ", true, encoding);
XMLWriter writer = new XMLWriter(osw, opf);
writer.write(doc);
writer.close();
return osw.toString();
} catch (IOException e) {
}
return "ERROR";
}

问题是,每次写回后都会创建一个额外的换行符。如果我将 outputFormat 的参数从 true 切换为 false,则根本不会写入任何换行符。

有没有简单的方法可以解决这个问题?

非常感谢豪克

最佳答案

在 Java 中编写格式化 XML 的最佳方法是使用 javax.xml.transform 包,如下所示:

 TransformerFactory transfac = TransformerFactory.newInstance();
transfac.setAttribute("indent-number", 2);
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
trans.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
Result result = new StreamResult(System.out);
trans.transform(new DomSource(document), result);

使用 FileOutputStream 作为目标文件,而不是 System.out

顺便说一句,您提供的代码中有许多问题:

FileUtils.writeByteArrayToFile(userFile, getFormatedXML(document).getBytes());

这对于不同的编码来说是不安全的,因为您使用了 String#getBytes(),它使用默认的平台编码,并且很容易导致 XML 文档的编码标题不正确。

XMLWriter 是一个特定于 com.sun 实现的类,不能跨 JDK 移植。 (这对您来说不太可能成为问题)

关于Java Dom4j SAXReader 和 XMLWriter 导致多个换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9782919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com