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

le code ci-dessus me donne le résultat suivant:Comment faire pour imprimer des attributs XML en Java?

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

il ne XML attributs non tiret, mais j'ai besoin des attributs xml-être indenté ainsi:

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

Comment fais le?

Répondre

2

Utilisez le sérialiseur Saxon plutôt que le sérialiseur Xalan. Si vous souhaitez forcer l'empilage vertical des attributs même s'ils sont ajustés horizontalement, définissez une petite valeur pour la propriété saxon: line-length.

+0

Pourriez-vous fournir un exemple de code? –

+0

Saxon prend en charge l'interface JAXP, ce qui vous permet d'utiliser essentiellement le code que vous avez déjà. Il suffit de placer Saxon sur le chemin de la classe. –

+0

J'ai ajouté [dépendance Saxon-HE] (https://mvnrepository.com/artifact/net.sf.saxon/Saxon-HE/9.7.0-15) à mon projet et il a commencé attributs indenter, mais il ne fonctionne pour les éléments contenant de nombreux attributs, et ne fonctionne pas pour les éléments contenant seulement 3-4 attributs. Pourriez-vous expliquer comment définir une petite valeur pour la propriété saxon: line-length? Essayez –