2017-02-25 3 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)); 

der obige Code gibt mir das folgende Ergebnis:Wie drucke ich XML-Attribute in Java?

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

es nicht indent xml-Attribute, aber ich brauche XML-Attribute als auch zu zerklüftet:

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

Wie TU es?

Antwort

2

Verwenden Sie den Saxon-Serializer anstelle des Xalan-Serialisierers, und wenn Attribute vertikal gestapelt werden sollen, auch wenn sie horizontal passen, legen Sie einen kleinen Wert für die Eigenschaft saxon: line-length fest.

+0

Können Sie einen Beispielcode angeben? –

+0

Saxon unterstützt die JAXP-Schnittstelle, so dass Sie im Wesentlichen den Code verwenden können, den Sie bereits haben - setzen Sie einfach Saxon auf den Klassenpfad. –

+0

Ich habe [Saxon-HE-Abhängigkeit] (https://mvnrepository.com/artifect/net.sf.saxon/Saxon-HE/9.7.0-15) zu meinem Projekt hinzugefügt und es hat begonnen, Attribute einzurücken, aber es funktioniert nur für die Elemente, die viele Attribute enthalten, und nicht für Elemente, die nur 3-4 Attribute enthalten. Können Sie erklären, wie Sie einen kleinen Wert für die Eigenschaft saxon: line-length festlegen? –