Saya sekarang belajar XmlDocument
tetapi saya baru saja bertemu XDocument
dan ketika saya mencoba mencari perbedaan atau manfaatnya saya tidak dapat menemukan sesuatu yang berguna, dapatkah Anda memberi tahu saya mengapa Anda akan menggunakan satu sama lain?
c#
xml
xmldocument
linq-to-xml
Tarik
sumber
sumber
Jawaban:
Jika Anda menggunakan .NET versi 3.0 atau lebih rendah, Anda harus menggunakan
XmlDocument
alias DOM API klasik. Anda juga akan menemukan beberapa API lain yang akan mengharapkan ini.Jika Anda mendapatkan pilihan, bagaimanapun, saya benar-benar akan merekomendasikan menggunakan
XDocument
alias LINQ ke XML. Jauh lebih mudah untuk membuat dokumen dan memprosesnya. Misalnya, perbedaan antara:dan
Namespaces cukup mudah digunakan di LINQ to XML, tidak seperti API XML lain yang pernah saya lihat:
LINQ ke XML juga bekerja sangat baik dengan LINQ - model konstruksinya memungkinkan Anda untuk membangun elemen dengan urutan sub-elemen dengan sangat mudah:
Semuanya jauh lebih deklaratif, yang cocok dengan gaya LINQ umum.
Sekarang seperti yang disebutkan oleh Brannon, ini adalah API dalam memori dan bukan yang streaming (meskipun
XStreamingElement
mendukung output malas).XmlReader
danXmlWriter
merupakan cara normal streaming XML dalam .NET, tetapi Anda dapat mencampur semua API sampai batas tertentu. Misalnya, Anda dapat melakukan streaming dokumen besar tetapi menggunakan LINQ ke XML dengan memposisikan sebuahXmlReader
di awal elemen, membacaXElement
dari dan memprosesnya, kemudian pindah ke elemen berikutnya dll. Ada berbagai posting blog tentang teknik ini, inilah yang saya temukan dengan pencarian cepat .sumber
Saya terkejut tidak ada jawaban sejauh ini menyebutkan fakta yang
XmlDocument
tidak memberikan informasi garis , sementaraXDocument
tidak (melaluiIXmlLineInfo
antarmuka).Ini bisa menjadi fitur penting dalam beberapa kasus (misalnya jika Anda ingin melaporkan kesalahan dalam XML, atau melacak di mana elemen didefinisikan secara umum) dan Anda sebaiknya mengetahui hal ini sebelum Anda dengan senang hati mulai menerapkan penggunaan menggunakan
XmlDocument
, untuk nanti temukan Anda harus mengubah semuanya.sumber
XDocument
itu memberikan informasi jalur. Lihat XDocument.Load denganLoadOptions.SetLineInfo
sebagai argumen kedua. Jika Anda tahu cara mendapatkan informasi lini denganXmlDocument
saya ingin tahu; kembali ketika saya menulis jawaban ini saya tidak dapat menemukannya. Jawaban lain ini tampaknya mengonfirmasi: stackoverflow.com/a/33622102/253883XmlDocument
sangat bagus untuk pengembang yang terbiasa dengan model objek XML DOM. Sudah ada untuk sementara waktu, dan kurang lebih sesuai dengan standar W3C. Ini mendukung navigasi manual sertaXPath
pemilihan simpul.XDocument
mendukung fitur LINQ ke XML di .NET 3.5. Itu membuat penggunaan beratIEnumerable<>
dan dapat lebih mudah untuk bekerja dengan C # lurus.Kedua model dokumen mengharuskan Anda untuk memuat seluruh dokumen ke dalam memori (tidak seperti
XmlReader
misalnya).sumber
Seperti yang disebutkan di tempat lain, tidak diragukan lagi, Linq ke Xml membuat penciptaan dan perubahan dokumen xml sangat mudah dibandingkan dengan
XmlDocument
, danXNamespace ns + "elementName"
sintaksnya membuat bacaan yang menyenangkan ketika berhadapan dengan ruang nama.Satu hal yang layak untuk disebutkan
xsl
danxpath
perlu diperhatikan adalah bahwa masih dimungkinkan untuk mengeksekusixpath 1.0
ekspresi arbitrer pada Linq 2 XmlXNodes
dengan memasukkan:dan kemudian kita dapat menavigasi dan memproyeksikan data menggunakan
xpath
melalui metode ekstensi ini:Misalnya, diberikan dokumen Xml:
Kami dapat mengevaluasi:
sumber
XDocument
berasal dari LINQ ke XML API, danXmlDocument
merupakan API gaya DOM standar untuk XML. Jika Anda mengenal DOM dengan baik, dan tidak ingin belajar LINQ ke XML, ikutiXmlDocument
. Jika Anda baru mengenal keduanya, lihat halaman ini yang membandingkan keduanya, dan pilih yang mana yang Anda sukai terlihat lebih baik.Saya baru saja mulai menggunakan LINQ ke XML, dan saya suka cara Anda membuat dokumen XML menggunakan konstruksi fungsional. Ini sangat bagus. DOM memang kikuk dibandingkan.
sumber
Juga, perhatikan yang
XDocument
didukung di Xbox 360 dan Windows Phone OS 7.0. Jika Anda menargetkan mereka, kembangkan untukXDocument
atau bermigrasi dariXmlDocument
.sumber
Saya percaya itu
XDocument
membuat lebih banyak objek penciptaan panggilan. Saya menduga bahwa ketika Anda menangani banyak dokumen XML,XMLDocument
akan lebih cepat.Satu tempat ini terjadi adalah dalam mengelola data pindai. Banyak alat pindai mengeluarkan data mereka dalam XML (untuk alasan yang jelas). Jika Anda harus memproses banyak file pemindaian ini, saya pikir Anda akan memiliki kinerja yang lebih baik
XMLDocument
.sumber