Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Soms wilt u LINQ schrijven naar XML-query's met complexe filters. U moet bijvoorbeeld alle elementen zoeken die een onderliggend element met een bepaalde naam en waarde hebben. Dit artikel bevat een voorbeeld van het schrijven van een query met complexe filters.
Voorbeeld: Zoeken met een geneste query in de Where component
In dit voorbeeld ziet u hoe u alle PurchaseOrder elementen kunt vinden met:
- Een onderliggend
Addresselement waarvanTypehet kenmerk gelijk is aan 'Verzending'. - Een onderliggend
Stateelement dat gelijk is aan 'NY'.
Er wordt een geneste query in de Where component gebruikt en de Any operator retourneert true of de verzameling elementen bevat. In het voorbeeld wordt een XML-bestand met voorbeeld-XML-documenten gebruikt: Meerdere inkooporders.
Zie Quantifier Operations (C#) en Quantifier Operations (Visual Basic) voor meer informatie over de Any operator.
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
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
99505
Voorbeeld: Zoeken in XML die zich in een naamruimte bevindt
In het volgende voorbeeld ziet u dezelfde query als hierboven, maar voor XML die zich in een naamruimte bevindt. Zie het overzicht van naamruimten voor meer informatie.
In dit voorbeeld wordt het XML-voorbeeldbestand van het XML-document gebruikt: meerdere inkooporders in een naamruimte.
XElement root = XElement.Load("PurchaseOrdersInNamespace.xml");
XNamespace aw = "http://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='http://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
In dit voorbeeld wordt de volgende uitvoer gegenereerd:
99505