如何:根据元素名称进行筛选 (LINQ to XML)

当调用返回 XElementIEnumerable<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> 的方法都遵循相同的模式。 它们的签名类似于 ElementsDescendants。 以下是具有相似方法签名的完整方法列表:

下面的示例演示如何对命名空间中的 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

请参见

概念

LINQ to XML 轴