2017-02-25 10 views
0
Transformer tf = TransformerFactory.newInstance().newTransformer(); 
tf.setOutputProperty(OutputKeys.INDENT, "yes"); 
tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); 
tf.transform(new StreamSource(reader), new StreamResult(writer)); 

上記のコードは私に次のような結果得られます。JavaでXML属性をきれいに印刷するには?

<Response> 
    <Head>ERROR</Head> 
    <Body> 
     <ERROR code="1000" reason="ServerSOAPFaultException" description="Fault occurred while processing."/> 
    </Body> 
</Response> 

それはないインデントのxml-属性を行いますが、私は同様にインデントされるXMLは、属性が必要:

<Response> 
    <Head>ERROR</Head> 
    <Body> 
     <ERROR code="1000" 
       reason="ServerSOAPFaultException" 
       description="Fault occurred while processing."/> 
    </Body> 
</Response> 

どのようにそれ?

答えて

2

XalanシリアライザではなくSaxonシリアライザを使用し、水平に収まる場合でも属性を垂直に積み重ねる場合は、saxon:line-lengthプロパティの値を小さく設定します。

+0

サンプルコードを提供できますか? –

+0

SaxonはJAXPインターフェイスをサポートしているので、すでに持っているコードを使うことができます。クラスパスにSaxonを置くだけです。 –

+0

私のプロジェクトに[Saxon-HE dependency](https://mvnrepository.com/artifact/net.sf.saxon/Saxon-HE/9.7.0-15)を追加しました。属性のインデントが開始されましたが、動作します多くの属性を含む要素に対しては、3〜4個の属性しか持たない要素に対しては機能しません。 saxon:line-lengthプロパティに小さな値を設定する方法を説明できますか? –

関連する問題