Compartir a través de


Cómo filtrar nombres de elemento (LINQ to XML)

Actualización: November 2007

Al llamar a uno de los métodos que devuelven IEnumerable<T> de XElement, puede filtrar por nombre de elemento.

Ejemplo

Este ejemplo recupera una colección de descendientes que se filtra para incluir sólo los descendientes con el nombre especificado.

Este ejemplo utiliza el siguiente documento XML: Archivo XML de muestra: pedido de compra típico (LINQ to XML). Archivo XML de muestra: pedido de compra típico (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

Este código genera el siguiente resultado:

ProductName:Lawnmower
ProductName:Baby Monitor

Los otros métodos que devuelven IEnumerable<T> de colecciones XElement siguen el mismo patrón. Sus firmas son similares a Elements y Descendants. A continuación, se incluye una lista completa de los métodos que tienen firmas similares:

El siguiente ejemplo muestra la misma consulta sobre un XML que se encuentra en un espacio de nombres. Para obtener más información, vea Trabajar con espacios de nombres XML.

Este ejemplo utiliza el siguiente documento XML: Archivo XML de muestra: pedido de compra típico en un espacio de nombres. Archivo XML de muestra: pedido de compra típico en un espacio de nombres.

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

Este código genera el siguiente resultado:

{https://www.adventure-works.com}ProductName:Lawnmower
{https://www.adventure-works.com}ProductName:Baby Monitor

Vea también

Conceptos

Ejes LINQ to XML