如何:根据元素名称进行筛选 (LINQ to XML)
当调用返回 XElement 的 IEnumerable<T> 的方法之一时,可以根据元素名称进行筛选。
示例
本示例说明如何检索经过筛选仅包含具有指定名称的子代的集合。
本示例使用下面的 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
其他返回 XElement 集合的 IEnumerable<T> 的方法都遵循相同的模式。 它们的签名类似于 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