Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Czasami chcesz napisać zapytania LINQ to XML ze złożonymi filtrami. Na przykład może być konieczne znalezienie wszystkich elementów, które mają element podrzędny o określonej nazwie i wartości. W tym artykule przedstawiono przykład pisania zapytania ze złożonym filtrowaniem.
Przykład: znajdź z zagnieżdżonym zapytaniem w klauzuli Where
W tym przykładzie pokazano, jak znaleźć wszystkie PurchaseOrder elementy, które mają:
- Element podrzędny
Address, któregoTypeatrybut jest równy "Wysyłka". - Element podrzędny
Staterówny "NY".
Używa zagnieżdżonego zapytania w klauzuli Where , a Any operator zwraca true , jeśli kolekcja zawiera jakiekolwiek elementy. W przykładzie użyto przykładowego pliku XML dokumentu XML: wiele zamówień zakupu.
Aby uzyskać więcej informacji na temat Any operatora, zobacz Operacje kwantyfikatora (C#) i Operacje kwantyfikatora (Visual Basic).
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
Ten przykład generuje następujące wyniki:
99505
Przykład: znajdź w formacie XML, który znajduje się w przestrzeni nazw
W poniższym przykładzie pokazano to samo zapytanie co powyżej, ale w przypadku kodu XML, który znajduje się w przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Omówienie przestrzeni nazw.
W tym przykładzie użyto przykładowego pliku XML dokumentu XML: wiele zamówień zakupu w przestrzeni nazw.
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
Ten przykład generuje następujące wyniki:
99505