0

我想将字符串格式化为 xml 这是我的代码:

Source xmlInput = new StreamSource(new StringReader(input));
StringWriter stringWriter = new StringWriter();
StreamResult xmlOutput = new StreamResult(stringWriter);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", String.valueOf(4));
transformer.transform(xmlInput, xmlOutput);

这是我的字符串

 <a><attr name="a1">this is a test</attr><attr name="a2"><![CDATA[this is a test inside cdata part]]></attr></a>

输出

<?xml version="1.0" encoding="UTF-8"?>
<a>
    <attr name="a1">this is a test</attr>
    <attr name="a2"><![CDATA[this is a test inside cdata part]]></attr>
</a>

想要的

<?xml version="1.0" encoding="UTF-8"?>
<a>
    <attr name="a1">
        this is a test
    </attr>
    <attr name="a2">
        <![CDATA[this is a test inside cdata part]]>
    </attr>
</a>

我希望每个新标签都以新行开始。

4

1 回答 1

2

规范中未定义 OutputKeys.INDENT 的精确效果。然而,规范的 XSLT 2.0 版本明确规定缩进只能在开始标记之前或结束标记之后添加空格——换句话说,非空格文本节点的值永远不会改变。

顺便说一句,规范中也没有定义 CDATA 将保留在 JAXP 身份转换中,我对发生这种情况感到有些惊讶。

于 2012-07-08T22:49:37.010 回答