Ich verwende den in Java integrierten XML-Transformator, um ein DOM-Dokument zu erstellen und das resultierende XML auszudrucken. Das Problem ist, dass der Text überhaupt nicht eingerückt wird, obwohl der Parameter "Einzug" explizit festgelegt wurde.
Beispielcode
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()));
}
}
Ergebnis
<?xml version="1.0" encoding="UTF-8" standalone="no"?><a><b/></a>
erwünschtes Ergebnis
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>
<b/>
</a>
Gedanken?
java
xml
transform
indentation
Mike
quelle
quelle
INDENT=yes
ich aucht.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
org.apache.xml.serializer.OutputPropertiesFactory.S_KEY_INDENT_AMOUNT
Keine der vorgeschlagenen Lösungen hat bei mir funktioniert. Also suchte ich weiter nach einer alternativen Lösung, die eine Mischung aus beiden zuvor genannten und einem dritten Schritt war.
Sie müssen (3) ausführen, um ein "fehlerhaftes" Verhalten des XML-Verarbeitungscodes zu umgehen.
Quelle: johnnymac75 @ http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296446
(Wenn ich meine Quelle falsch zitiert habe, lassen Sie es mich bitte wissen.)
quelle
TransformerFactory
tatsächlich sind, damit andere es wissen?Writer
als Ausgabe verwendet wird, ist unerlässlich.Der folgende Code funktioniert für mich mit Java 7. Ich habe den Einzug (Ja) und den Einrückungsbetrag (2) am Transformator (nicht in der Transformatorfabrik) festgelegt, damit er funktioniert.
Die Lösung von @ mabac zum Festlegen des Attributs funktionierte bei mir nicht, aber der Kommentar von @ lapo erwies sich als hilfreich.
quelle
importieren Sie com.sun.org.apache.xml.internal.serializer.OutputPropertiesFactory
quelle
Wenn Sie die Einrückung möchten, müssen Sie sie für das angeben
TransformerFactory
.quelle
Ich habe die Xerces (Apache) -Bibliothek verwendet, anstatt mit Transformer herumzuspielen. Sobald Sie die Bibliothek hinzugefügt haben, fügen Sie den folgenden Code hinzu.
quelle
Für mich hat das Hinzufügen
DOCTYPE_PUBLIC
funktioniert:quelle