1

我正在解析一个 XML 文档并将其序列化回来。我想尽可能地保留原始缩进和换行符。我不想漂亮地打印 DOM。

考虑下面的代码,其中原始文档在标记之前和之后有一个新行<div>并且没有缩进。

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import org.xml.sax.InputSource;
import java.io.StringReader;

public class Test {
    public static void main(String args[]) throws Exception {
        String xmlIn = "<html>\n<div>Hello World!</div>\n</html>";
        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = documentBuilder.parse(new InputSource(new StringReader(xmlIn)));
        TransformerFactory transfac = TransformerFactory.newInstance();
        Transformer domTransformer = transfac.newTransformer();

        domTransformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        domTransformer.setOutputProperty(OutputKeys.INDENT, "no");

        StreamResult result = new StreamResult(System.out);
        DOMSource source = new DOMSource(doc);

        domTransformer.transform(source, result);
    }
}

期望是看到这个:

<html>
<div>Hello World!</div>
</html>

但是,Java 8 正在打印:

<html>

<div>Hello World!</div>

</html>

Java 11 正在打印:

<html>
    
    <div>Hello World!</div>
    
</html>

如您所见,它们都添加了一个额外的新行。Java 11 还添加了缩进。

如何防止添加额外的新行和缩进?

4

0 回答 0