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 ID変換で保持されることも仕様で定義されておらず、これが発生することに少し驚いています。

于 2012-07-08T22:49:37.010 に答える