【问题标题】:Reading Transformer result line by line (Java)逐行读取Transformer结果(Java)
【发布时间】:2015-10-24 15:43:29
【问题描述】:

我正在使用 Transformer 来美化并将缩进插入到最初是一大行的 XML 中。 这是我的代码:

BufferedWriter br = null;
Source xmlInput = new StreamSource(inputSR);
StringWriter stringWriter = new StringWriter();
StreamResult xmlOutput = new StreamResult(stringWriter);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", 2);
Transformer transformer = transformerFactory.newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(xmlInput, xmlOutput);

如何将xmlOutput 写入文件,逐行(不将整个字符串加载到内存中)?

【问题讨论】:

    标签: java xml string line


    【解决方案1】:

    使用 FileOutputStream 代替 StringWriter:

    StreamResult xmlOutput = new StreamResult(new FileOutputStream("output.xml"))
    

    这将增量写入文件。它不一定会逐行编写(行在 XML 中没有多大意义),但我不明白您为什么要这样做。

    【讨论】:

    • 目的是在写入磁盘之前修改某些标签。
    • 使用 SAXResult 可能会更好。然后将结果树逐个事件发送到您的 ContentHandler。如果你想修改序列化后的结果流,你可以实现一个 Writer 并拦截 write() 调用,但是你必须自己做缓冲以避免你正在寻找的文本跨越多个方法调用,例如写()。
    猜你喜欢
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2016-01-24
    • 2021-08-08
    • 2020-08-15
    • 1970-01-01
    相关资源
    最近更新 更多