Saya menggunakan transformator XML bawaan Java untuk mengambil dokumen DOM dan mencetak XML yang dihasilkan. Masalahnya adalah bahwa teks sama sekali tidak menjorok ke dalam meskipun telah menyetel parameter "indentasi" secara eksplisit.
Kode sampel
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()));
}
}
hasil
<?xml version="1.0" encoding="UTF-8" standalone="no"?><a><b/></a>
hasil yang diinginkan
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>
<b/>
</a>
Pikiran?
java
xml
transform
indentation
Mike
sumber
sumber
INDENT=yes
saya juga harus menambahkan ini:t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
org.apache.xml.serializer.OutputPropertiesFactory.S_KEY_INDENT_AMOUNT
Tak satu pun dari solusi yang disarankan berhasil untuk saya. Jadi saya terus mencari solusi alternatif, yang akhirnya menjadi campuran dari dua langkah sebelumnya dan langkah ketiga.
Anda harus melakukan (3) untuk mengatasi perilaku "buggy" dari kode penanganan xml.
Sumber: johnnymac75 @ http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296446
(Jika saya salah mengutip sumber saya, beri tahu saya)
sumber
TransformerFactory
sebenarnya sehingga orang lain tahu.Writer
sebagai output, sangat penting.Kode berikut berfungsi untuk saya dengan Java 7. Saya mengatur indentasi (ya) dan jumlah indentasi (2) pada trafo (bukan pabrik trafo) untuk membuatnya berfungsi.
Solusi @ mabac untuk menyetel atribut tidak berhasil untuk saya, tetapi komentar @ lapo terbukti membantu.
sumber
impor com.sun.org.apache.xml.internal.serializer.OutputPropertiesFactory
sumber
Jika Anda menginginkan indentasi, Anda harus menentukannya ke
TransformerFactory
.sumber
Saya menggunakan perpustakaan Xerces (Apache) daripada mengotak-atik Transformer. Setelah Anda menambahkan perpustakaan, tambahkan kode di bawah ini.
sumber
Bagi saya menambahkan
DOCTYPE_PUBLIC
berhasil:sumber