我正在解析一个 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 还添加了缩进。
如何防止添加额外的新行和缩进?