Perbandingan JalurX dan LINQ ke XML
JalurX dan LINQ ke XML serupa dalam beberapa cara. Keduanya dapat digunakan untuk mengkueri pohon XML, mengembalikan hasil seperti kumpulan elemen, kumpulan atribut, kumpulan node, atau nilai elemen atau atribut. Namun, ada perbedaan yang signifikan antara kedua opsi tersebut.
Perbedaan antara JalurX dan LINQ ke XML
JalurX tidak mengizinkan proyeksi jenis baru. Ini hanya dapat mengembalikan kumpulan node dari pohon, sedangkan LINQ ke XML dapat menjalankan kueri dan memproyeksikan grafik objek atau pohon XML dalam bentuk baru. Kueri LINQ ke XML dapat melakukan lebih banyak hal daripada ekspresi JalurX.
Ekspresi JalurX ada secara terisolasi dalam string. Pengompilasi C# tidak dapat membantu mengurai ekspresi JalurX pada saat kompilasi. Sebaliknya, kueri LINQ ke XML diurai dan dikompilasi oleh pengompilasi C#. Pengompilasi dapat menangkap banyak kesalahan kueri.
Hasil JalurX tidak berjenis kuat. Dalam sejumlah keadaan, hasil evaluasi ekspresi JalurX adalah objek, dan menjadi wewenang pengembang untuk menentukan jenis yang tepat dan mentransmisikan hasilnya sesuai kebutuhan. Sebaliknya, proyeksi dari kueri LINQ ke XML sangat berjenis kuat.
Pengurutan hasil
Rekomendasi JalurX 1.0 menyatakan bahwa koleksi yang merupakan hasil evaluasi ekspresi JalurX tidak diurutkan.
Namun, saat melakukan iterasi melalui koleksi yang dikembalikan oleh metode sumbu JalurX LINQ ke XML, node dalam koleksi dikembalikan dalam urutan dokumen. Ini terjadi bahkan ketika mengakses sumbu JalurX di mana predikat dinyatakan dalam urutan dokumen terbalik, seperti preceding
dan preceding-sibling
.
Sebaliknya, sebagian besar sumbu LINQ ke XML mengembalikan koleksi dalam urutan dokumen. Namun, dua di antaranya, Ancestors dan AncestorsAndSelf, mengembalikan koleksi dalam urutan dokumen terbalik. Tabel berikut menghitung sumbu, dan menunjukkan urutan koleksi untuk masing-masing:
Sumbu LINQ ke XML | Memesan |
---|---|
XContainer.DescendantNodes | Urutan dokumen |
XContainer.Descendants | Urutan dokumen |
XContainer.Elements | Urutan dokumen |
XContainer.Nodes | Urutan dokumen |
XContainer.NodesAfterSelf | Urutan dokumen |
XContainer.NodesBeforeSelf | Urutan dokumen |
XElement.AncestorsAndSelf | Urutan dokumen terbalik |
XElement.Attributes | Urutan dokumen |
XElement.DescendantNodesAndSelf | Urutan dokumen |
XElement.DescendantsAndSelf | Urutan dokumen |
XNode.Ancestors | Urutan dokumen terbalik |
XNode.ElementsAfterSelf | Urutan dokumen |
XNode.ElementsBeforeSelf | Urutan dokumen |
XNode.NodesAfterSelf | Urutan dokumen |
XNode.NodesBeforeSelf | Urutan dokumen |
Predikat posisi
Dalam ekspresi JalurX, predikat posisi dinyatakan terkait urutan dokumen untuk banyak sumbu, tetapi dinyatakan dalam urutan dokumen terbalik untuk sumbu terbalik. Sumbu terbalik antara lain: preceding
, preceding-sibling
, ancestor
, dan ancestor-or-self
. Misalnya, ekspresi JalurX preceding-sibling::*[1]
mengembalikan elemen sejawat sebelumnya. Hal ini terjadi meskipun kumpulan hasil akhir disajikan dalam urutan dokumen.
Sebaliknya, semua predikat posisi dalam LINQ ke XML selalu dinyatakan dalam urutan sumbu. Misalnya, anElement.ElementsBeforeSelf().ElementAt(0)
mengembalikan elemen turunan pertama dari induk elemen yang dikueri, bukan elemen sejawat sebelumnya. Contoh lain: anElement.Ancestors().ElementAt(0)
mengembalikan elemen induk.
Jika ingin menemukan elemen sebelumnya di LINQ ke XML, Anda perlu menulis ekspresi berikut:
ElementsBeforeSelf().Last()
ElementsBeforeSelf().Last()
Perbedaan performa
Kueri JalurX yang menggunakan fungsionalitas JalurX di LINQ ke XML akan lebih lambat daripada kueri LINQ ke XML.
Perbandingan komposisi
Komposisi kueri LINQ ke XML mirip dengan komposisi ekspresi JalurX, tetapi sintaksnya sangat berbeda.
Misalnya, jika memiliki elemen dalam variabel bernama customers
, dan Anda ingin menemukan elemen cucu bernama CompanyName
di bawah semua elemen turunan bernama Customer
, Anda akan menulis ekspresi JalurX ini:
customers.XPathSelectElements("./Customer/CompanyName")
customers.XPathSelectElements("./Customer/CompanyName")
Kueri LINQ ke XML yang setara adalah:
customers.Elements("Customer").Elements("CompanyName")
customers.Elements("Customer").Elements("CompanyName")
Terdapat paralel yang sama untuk masing-masing sumbu JalurX.
Sumbu JalurX | Sumbu LINQ ke XML |
---|---|
turunan (sumbu default) | XContainer.Elements |
Induk (..) | XObject.Parent |
sumbu atribut (@) | XElement.Attribute or XElement.Attributes |
sumbu leluhur | XNode.Ancestors |
sumbu ancestor-or-self | XElement.AncestorsAndSelf |
sumbu keturunan (//) | XContainer.Descendants or XContainer.DescendantNodes |
descendant-or-self | XElement.DescendantsAndSelf or XElement.DescendantNodesAndSelf |
following-sibling | XNode.ElementsAfterSelf or XNode.NodesAfterSelf |
preceding-sibling | XNode.ElementsBeforeSelf or XNode.NodesBeforeSelf |
mengikuti | Tidak memiliki persamaan langsung. |
sebelumnya | Tidak memiliki persamaan langsung. |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk