1

XMLドキュメントを作成し、JVM組み込みライブラリを使用してインデントされた形式で印刷しています。改行を含むテキストノードがドキュメントにある場合、適切なインデント位置ではなく、行を行の先頭に折り返します

サンプルコード

ByteArrayOutputStream s;

s = new ByteArrayOutputStream();

Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Transformer t = TransformerFactory.newInstance().newTransformer();

Element a;
Text b;

a = d.createElement("a");

String text = "multi\nline\ntext";
b = d.createTextNode(text);

a.appendChild(b);
d.appendChild(a);

t.setOutputProperty(OutputKeys.INDENT,"yes");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
t.transform(new DOMSource(d), new StreamResult(s));

System.out.println(new String(s.toByteArray()));

出力

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>multi
line
text</a>

希望する出力

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>
 multi
 line
 text
</a>

インデントされたxmlタグが始まる場所から新しい各行を開始するスマートな方法はありますか?textnodeを使用するのは適切ではないということを教えてくれますか?もっと良いものはありますか?

4

1 に答える 1

2

インデントを変更すると、実際にはそのノードのテキストコンテンツが変更されることに注意してください。すなわち

<a>
 multi
 line
 text
</a>

XML APIによって読み取られるように、テキストに複数の先頭のスペースが作成されます。それはあなたが望むものですか?これがあなたの質問に対する答えではないことは知っていますが、あなたが本当にインデントを維持したいかどうかはわかりません。XML構造のさらに下にインデントされた(つまり、より多くの先頭のスペースがある)テキストノードをどのように処理しますか?

于 2009-09-06T08:57:50.923 に答える