J'utilise le transformateur XML intégré de Java pour prendre un document DOM et imprimer le XML résultant. Le problème est qu'il ne met pas du tout le texte en retrait malgré la définition explicite du paramètre "indent".
exemple de code
public class TestXML {
public static void main(String args[]) throws Exception {
ByteArrayOutputStream s;
Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Transformer t = TransformerFactory.newInstance().newTransformer();
Element a,b;
a = d.createElement("a");
b = d.createElement("b");
a.appendChild(b);
d.appendChild(a);
t.setParameter(OutputKeys.INDENT, "yes");
s = new ByteArrayOutputStream();
t.transform(new DOMSource(d),new StreamResult(s));
System.out.println(new String(s.toByteArray()));
}
}
résultat
<?xml version="1.0" encoding="UTF-8" standalone="no"?><a><b/></a>
résultat désiré
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>
<b/>
</a>
Pensées?
java
xml
transform
indentation
Mike
la source
la source
INDENT=yes
j'ai également dû ajouter ceci:t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
org.apache.xml.serializer.OutputPropertiesFactory.S_KEY_INDENT_AMOUNT
Aucune des solutions suggérées n'a fonctionné pour moi. J'ai donc continué à chercher une solution alternative, qui a fini par être un mélange des deux mentionnés précédemment et une troisième étape.
Vous devez faire (3) pour contourner un comportement "bogué" du code de gestion xml.
Source: johnnymac75 @ http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296446
(Si j'ai mal cité ma source, merci de me le faire savoir)
la source
TransformerFactory
réellement pour que les autres le sachent.Writer
comme sortie, est essentielle.Le code suivant fonctionne pour moi avec Java 7. J'ai défini l'indentation (oui) et l'indent-amount (2) sur le transformateur (pas l'usine de transformateurs) pour le faire fonctionner.
La solution de @ mabac pour définir l'attribut n'a pas fonctionné pour moi, mais le commentaire de @ lapo s'est avéré utile.
la source
import com.sun.org.apache.xml.internal.serializer.OutputPropertiesFactory
la source
Si vous voulez l'indentation, vous devez le spécifier dans le fichier
TransformerFactory
.la source
J'ai utilisé la bibliothèque Xerces (Apache) au lieu de jouer avec Transformer. Une fois que vous avez ajouté la bibliothèque, ajoutez le code ci-dessous.
la source
Pour moi, l'ajout a
DOCTYPE_PUBLIC
fonctionné:la source