Compartir a través de


Cómo buscar atributos de elementos secundarios con un nombre específico (XPath-LINQ to XML)

Actualización: November 2007

En este tema se muestra cómo buscar todos los atributos de los elementos secundarios del nodo de contexto. Sólo se devuelven los atributos con un nombre específico en la recopilación.

La expresión XPath es:

../Book/@id

Ejemplo

Este ejemplo primero busca un elemento Book, después busca todos los elementos secundarios con el nombre Book y después busca todos los atributos con el nombre id. El resultado es una recopilación de atributos.

Este ejemplo utiliza el siguiente documento XML: Archivo XML de muestra: libros (LINQ to XML).

XDocument books = XDocument.Load("Books.xml");

XElement book = 
    books
    .Root
    .Element("Book");

// LINQ to XML query
IEnumerable<XAttribute> list1 =
    from el in book.Parent.Elements("Book")
    select el.Attribute("id");

// XPath expression
IEnumerable<XAttribute> list2 =
  ((IEnumerable)book.XPathEvaluate("../Book/@id")).Cast<XAttribute>();

if (list1.Count() == list2.Count() &&
        list1.Intersect(list2).Count() == list1.Count())
    Console.WriteLine("Results are identical");
else
    Console.WriteLine("Results differ");
foreach (XAttribute el in list1)
    Console.WriteLine(el);
Dim books as XDocument = XDocument.Load("Books.xml")
Dim book As XElement = books.Root.<Book>(0)

' LINQ to XML query
Dim list1 As IEnumerable(Of XAttribute) = _
    From el In book.Parent.<Book> _
    Select el.Attribute("id")

' XPath expression
Dim list2 As IEnumerable(Of XAttribute) = DirectCast(book. _
    XPathEvaluate("../Book/@id"), IEnumerable).Cast(Of XAttribute)()

If list1.Count() = list2.Count() And _
        (list1.Intersect(list2)).Count() = list1.Count() Then
    Console.WriteLine("Results are identical")
Else
    Console.WriteLine("Results differ")
End If

For Each el As XAttribute In list1
    Console.WriteLine(el)
Next

Este ejemplo genera el siguiente resultado:

Results are identical
id="bk101"
id="bk102"

Vea también

Conceptos

LINQ to XML para usuarios de XPath