Ketika saya membangun XML dari awal dengan XmlDocument
, OuterXml
properti sudah memiliki semua yang menjorok dengan baik dengan jeda baris. Namun, jika saya memanggil LoadXml
beberapa XML yang sangat "terkompresi" (tidak ada jeda baris atau indensi) maka keluarannya OuterXml
tetap seperti itu. Jadi ...
Apa cara termudah untuk mendapatkan keluaran XML yang dipercantik dari sebuah instance XmlDocument
?
c#
.net
xmldocument
outerxml
Neil C. Obremski
sumber
sumber
settings.Encoding = Encoding.UTF8;
MemoryStream
+StreamWriter
dengan pengkodean yang ditentukan, bukanStringBuilder
, dan mendapatkan teks denganenc.GetString(memstream.GetBuffer(), 0, (int)memstream.Length);
. Hasil akhirnya masih belum diformat. Mungkinkah terkait bahwa saya memulai dari dokumen baca yang sudah memiliki format? Saya hanya ingin node baru saya diformat juga."\r\n"
menjadiEnvironment.Newline
.doc.PreserveWhitespace
tidak boleh disetel ke true. Jika tidak, gagal jika sudah berisi indentasi parsial.Seperti yang diadaptasi dari blog Erika Ehrli , berikut ini adalah:
sumber
using
pernyataan secara otomatis akan menutup penulis saatDispose()
dipanggil.Atau bahkan lebih mudah jika Anda memiliki akses ke LINQ
sumber
<?xml ...?>
dan<!DOCTYPE ...>
dari XML. OK untuk sebuah fragmen, tetapi tidak diinginkan untuk dokumen lengkap.Versi metode ekstensi yang lebih pendek
sumber
Jika metode Beautify di atas dipanggil untuk
XmlDocument
yang sudah berisi fileXmlProcessingInstruction
node anak, pengecualian berikut akan ditampilkan:Ini adalah versi modifikasi saya dari yang asli untuk menghilangkan pengecualian:
Ini berfungsi untuk saya sekarang, mungkin Anda perlu memindai semua node anak untuk
XmlProcessingInstruction
node tersebut, bukan hanya yang pertama?Pembaruan April 2015:
Karena saya memiliki kasus lain di mana pengkodeannya salah, saya mencari cara untuk menerapkan UTF-8 tanpa BOM. Saya menemukan postingan blog ini dan membuat fungsi berdasarkan:
sumber
Encoding = Encoding.UTF8
danOmitXmlDeclaration = true
sumber
sumber
Cara sederhana adalah dengan menggunakan:
Seperti kode contoh ini, kode ini yang saya gunakan untuk membuat tampilan pohon seperti struktur menggunakan XMLWriter:
Dengan cara ini Anda dapat menambahkan tab atau jeda baris dengan cara yang biasa Anda lakukan, yaitu \ t atau \ n
sumber
Saat menerapkan saran yang diposting di sini, saya mengalami masalah dengan pengkodean teks. Tampaknya pengkodean
XmlWriterSettings
diabaikan, dan selalu diganti dengan pengkodean aliran. Saat menggunakan aStringBuilder
, ini selalu merupakan pengkodean teks yang digunakan secara internal di C #, yaitu UTF-16.Jadi, inilah versi yang mendukung pengkodean lain juga.
CATATAN PENTING: Pemformatan sepenuhnya diabaikan jika
XMLDocument
objek Anda memilikinyapreserveWhitespace
mengaktifkan propertinya saat memuat dokumen. Ini membuat saya bingung untuk sementara waktu, jadi pastikan untuk tidak mengaktifkannya.Kode terakhir saya:
Ini akan menyimpan format xml ke disk, dengan pengkodean teks yang diberikan.
sumber
Jika Anda memiliki string XML, bukan dokumen yang siap digunakan, Anda dapat melakukannya dengan cara ini:
sumber
Pendekatan yang lebih disederhanakan berdasarkan jawaban yang diterima:
Pengaturan baris baru tidak perlu. Karakter indentasi juga memiliki dua spasi default jadi saya lebih suka untuk tidak mengaturnya juga.
sumber