Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Es posible que desee escribir consultas LINQ to XML con filtros complejos.Por ejemplo, quizás debe buscar todos los elementos que tienen un elemento secundario con un valor y un nombre específicos.En este tema se proporciona un ejemplo de escritura de una consulta con un filtrado complejo.
Ejemplo
En este ejemplo se muestra cómo buscar todos los elementos PurchaseOrder que tienen un elemento Address secundario que tiene un atributo Type igual a "Shipping" (envío) y un elemento State secundario igual a "NY".Utiliza una consulta anidada en la cláusula Where y el operador Any devuelve true si la colección tiene elementos en ella.Para obtener información acerca de la sintaxis de consulta basada en métodos, vea Sintaxis de consultas LINQ y sintaxis de métodos (C#).
Este ejemplo utiliza el siguiente documento XML: Archivo XML de muestra: varios pedidos de compra (LINQ to XML).
Para obtener más información acerca del operador Any, vea Operaciones cuantificadoras.
XElement root = XElement.Load("PurchaseOrders.xml");
IEnumerable<XElement> purchaseOrders =
from el in root.Elements("PurchaseOrder")
where
(from add in el.Elements("Address")
where
(string)add.Attribute("Type") == "Shipping" &&
(string)add.Element("State") == "NY"
select add)
.Any()
select el;
foreach (XElement el in purchaseOrders)
Console.WriteLine((string)el.Attribute("PurchaseOrderNumber"));
Dim root As XElement = XElement.Load("PurchaseOrders.xml")
Dim purchaseOrders As IEnumerable(Of XElement) = _
From el In root.<PurchaseOrder> _
Where _
(From add In el.<Address> _
Where _
add.@Type = "Shipping" And _
add.<State>.Value = "NY" _
Select add) _
.Any() _
Select el
For Each el As XElement In purchaseOrders
Console.WriteLine(el.@PurchaseOrderNumber)
Next
Este código genera el siguiente resultado:
99505
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: varios pedidos de compra en un espacio de nombres.
XElement root = XElement.Load("PurchaseOrdersInNamespace.xml");
XNamespace aw = "https://www.adventure-works.com";
IEnumerable<XElement> purchaseOrders =
from el in root.Elements(aw + "PurchaseOrder")
where
(from add in el.Elements(aw + "Address")
where
(string)add.Attribute(aw + "Type") == "Shipping" &&
(string)add.Element(aw + "State") == "NY"
select add)
.Any()
select el;
foreach (XElement el in purchaseOrders)
Console.WriteLine((string)el.Attribute(aw + "PurchaseOrderNumber"));
Imports <xmlns:aw='https://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = XElement.Load("PurchaseOrdersInNamespace.xml")
Dim purchaseOrders As IEnumerable(Of XElement) = _
From el In root.<aw:PurchaseOrder> _
Where _
(From add In el.<aw:Address> _
Where _
add.@aw:Type = "Shipping" And _
add.<aw:State>.Value = "NY" _
Select add) _
.Any() _
Select el
For Each el As XElement In purchaseOrders
Console.WriteLine(el.@aw:PurchaseOrderNumber)
Next
End Sub
End Module
Este código genera el siguiente resultado:
99505
Vea también
Referencia
Propiedades de eje secundario XML (Visual Basic)
Propiedad de eje para atributos XML (Visual Basic)
Value (Propiedad XML) (Visual Basic)