복잡한 필터링을 사용하여 쿼리를 작성하는 방법(LINQ to XML)
복잡한 필터를 사용하여 LINQ to XML 쿼리를 작성하려는 경우가 있습니다. 예를 들어, 특정 이름과 값을 가진 자식 요소가 있는 모든 요소를 찾으려고 할 수 있습니다. 이 문서에서는 복잡한 필터링을 사용하여 쿼리를 작성하는 예를 제공합니다.
예: Where
절에서 중첩 쿼리로 찾기
이 예에서는 다음을 포함하는 모든 PurchaseOrder
요소를 찾는 방법을 보여 줍니다.
Type
특성이 "Shipping"인 자식Address
요소.- "NY"와 동일한 자식
State
요소.
이 예제에서는 Where
절에서 중첩 쿼리를 사용하며, Any
연산자는 컬렉션에 요소가 있는 경우 true
를 반환합니다. 이 예에서는 XML 문서 샘플 XML 파일: 여러 구매 주문서를 사용합니다.
Any
연산자에 대한 자세한 내용은 수량자 작업(C#) 및 수량자 작업(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
이 예제는 다음과 같은 출력을 생성합니다.
99505
예: 네임스페이스에 있는 XML에서 찾기
다음 예에서는 위와 동일한 쿼리를 보여 주지만 네임스페이스에 있는 XML에 대한 것입니다. 자세한 내용은 네임스페이스 개요를 참조하세요.
이 예에서는 XML 문서 샘플 XML 파일: 네임스페이스의 여러 구매 주문서를 사용합니다.
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
이 예제는 다음과 같은 출력을 생성합니다.
99505
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기