Как выполнить фильтрацию по именам элементов (LINQ to XML)
Обновлен: November 2007
При вызове одного из методов, возвращающих коллекцию IEnumerable<T> элементов XElement, можно осуществить фильтрацию по именам элементов.
Пример
В этом примере показано получение отфильтрованной коллекции потомков, в которой содержатся только потомки с указанным именем.
В этом примере используется следующий XML-документ: Образец XML-файла: типичный заказ на покупку (LINQ to XML).
XElement po = XElement.Load("PurchaseOrder.xml");
IEnumerable<XElement> items =
from el in po.Descendants("ProductName")
select el;
foreach(XElement prdName in items)
Console.WriteLine(prdName.Name + ":" + (string) prdName);
Dim po As XElement = XElement.Load("PurchaseOrder.xml")
Dim items As IEnumerable(Of XElement) = _
From el In po...<ProductName> _
Select el
For Each prdName As XElement In items
Console.WriteLine(prdName.Name.ToString & ":" & prdName.Value)
Next
Этот код выводит следующие результаты:
ProductName:Lawnmower
ProductName:Baby Monitor
В других методах, возвращающих коллекции IEnumerable<T> элементов XElement, заложен тот же принцип. Их подписи подобны Elements и Descendants. Ниже следует полный список методов, имеющих аналогичные подписи методов:
Следующий пример демонстрирует тот же запрос XML, что и в пространстве имен. Дополнительные сведения см. в разделе Работа с пространствами имен XML.
В этом примере используется следующий XML-документ: Образец XML-файла: Типичный заказ на покупку в пространстве имен.
XNamespace aw = "https://www.adventure-works.com";
XElement po = XElement.Load("PurchaseOrderInNamespace.xml");
IEnumerable<XElement> items =
from el in po.Descendants(aw + "ProductName")
select el;
foreach (XElement prdName in items)
Console.WriteLine(prdName.Name + ":" + (string)prdName);
Imports <xmlns:aw="https://www.adventure-works.com">
Module Module1
Sub Main()
Dim po As XElement = XElement.Load("PurchaseOrderInNamespace.xml")
Dim items As IEnumerable(Of XElement) = _
From el In po...<aw:ProductName> _
Select el
For Each prdName As XElement In items
Console.WriteLine(prdName.Name.ToString & ":" & prdName.Value)
Next
End Sub
End Module
Этот код выводит следующие результаты:
{https://www.adventure-works.com}ProductName:Lawnmower
{https://www.adventure-works.com}ProductName:Baby Monitor