Cara menautkan panggilan metode sumbu (LINQ ke XML)
Pola umum yang akan Anda gunakan dalam kode Anda adalah memanggil metode sumbu, lalu memanggil salah satu sumbu metode ekstensi.
Ada dua sumbu dengan nama Elements
yang mengembalikan kumpulan elemen: metode XContainer.Elements dan metode Extensions.Elements. Anda dapat menggabungkan kedua sumbu ini untuk menemukan semua elemen dari nama tertentu pada kedalaman tertentu di pohon.
Contoh: Mengambil semua elemen nama
Contoh ini menggunakan XContainer.Elements dan Extensions.Elements untuk mengambil semua elemen Name
di semua elemen Address
di semua elemen PurchaseOrder
.
Contohnya menggunakan file XML Sampel dokumen XML: Beberapa pesanan pembelian.
XElement purchaseOrders = XElement.Load("PurchaseOrders.xml");
IEnumerable<XElement> names =
from el in purchaseOrders
.Elements("PurchaseOrder")
.Elements("Address")
.Elements("Name")
select el;
foreach (XElement e in names)
Console.WriteLine(e);
Dim purchaseOrders As XElement = XElement.Load("PurchaseOrders.xml")
Dim names As IEnumerable(Of XElement) = _
From el In purchaseOrders.<PurchaseOrder>.<Address>.<Name> _
Select el
For Each e As XElement In names
Console.WriteLine(e)
Next
Contoh ini menghasilkan output berikut:
<Name>Ellen Adams</Name>
<Name>Tai Yee</Name>
<Name>Cristian Osorio</Name>
<Name>Cristian Osorio</Name>
<Name>Jessica Arnold</Name>
<Name>Jessica Arnold</Name>
Ini berfungsi karena salah satu implementasi sumbu Elements
adalah metode ekstensi pada IEnumerable<T>XContainer. XElement berasal dari XContainer, sehingga Anda dapat memanggil metode Extensions.Elements pada hasil panggilan ke metode XContainer.Elements.
Contoh: Mengambil semua elemen pada kedalaman tertentu
Terkadang Anda ingin mengambil semua elemen pada kedalaman elemen tertentu saat mungkin tidak ada pendahulu yang mengintervensi. Misalnya, dalam dokumen berikut, Anda mungkin ingin mengambil semua elemen ConfigParameter
yang merupakan turunan elemen Customer
, tetapi bukan ConfigParameter
yang merupakan turunan elemen Root
.
<Root>
<ConfigParameter>RootConfigParameter</ConfigParameter>
<Customer>
<Name>Frank</Name>
<Config>
<ConfigParameter>FirstConfigParameter</ConfigParameter>
</Config>
</Customer>
<Customer>
<Name>Bob</Name>
<!--This customer doesn't have a Config element-->
</Customer>
<Customer>
<Name>Bill</Name>
<Config>
<ConfigParameter>SecondConfigParameter</ConfigParameter>
</Config>
</Customer>
</Root>
Untuk melakukan ini, Anda dapat menggunakan sumbu Extensions.Elements, sebagai berikut:
XElement root = XElement.Load("Irregular.xml");
IEnumerable<XElement> configParameters =
root.Elements("Customer").Elements("Config").
Elements("ConfigParameter");
foreach (XElement cp in configParameters)
Console.WriteLine(cp);
Dim root As XElement = XElement.Load("Irregular.xml")
Dim configParameters As IEnumerable(Of XElement) = _
root.<Customer>.<Config>.<ConfigParameter>
For Each cp As XElement In configParameters
Console.WriteLine(cp)
Next
Contoh ini menghasilkan output berikut:
<ConfigParameter>FirstConfigParameter</ConfigParameter>
<ConfigParameter>SecondConfigParameter</ConfigParameter>
Contoh: Mengambil elemen untuk XML yang ada di namespace layanan
Contoh berikut menunjukkan kueri yang sama, tetapi untuk XML yang ada di namespace layanan XML. Untuk informasi lebih lanjut, lihat Ringkasan kumpulan nama XML.
Contoh ini menggunakan File XML sampel dokumen XML: Beberapa pesanan pembelian di namespace.
XNamespace aw = "http://www.adventure-works.com";
XElement purchaseOrders = XElement.Load("PurchaseOrdersInNamespace.xml");
IEnumerable<XElement> names =
from el in purchaseOrders
.Elements(aw + "PurchaseOrder")
.Elements(aw + "Address")
.Elements(aw + "Name")
select el;
foreach (XElement e in names)
Console.WriteLine(e);
Imports <xmlns:aw="http://www.adventure-works.com">
Module Module1
Sub Main()
Dim purchaseOrders As XElement = XElement.Load("PurchaseOrdersInNamespace.xml")
Dim names As IEnumerable(Of XElement) = _
From el In purchaseOrders.<aw:PurchaseOrder>.<aw:Address>.<aw:Name> _
Select el
For Each e As XElement In names
Console.WriteLine(e)
Next
End Sub
End Module
Contoh ini menghasilkan output berikut:
<aw:Name xmlns:aw="http://www.adventure-works.com">Ellen Adams</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Tai Yee</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Cristian Osorio</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Cristian Osorio</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Jessica Arnold</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Jessica Arnold</aw:Name>