축 메서드 호출을 연결하는 방법(LINQ to XML)
코드에 사용할 수 있는 일반적인 방법은 축 메서드를 호출한 다음 확장명 메서드 축 중 하나를 호출하는 것입니다.
요소의 컬렉션을 반환하며 Elements
의 이름이 포함된 두 축인 XContainer.Elements 메서드와 Extensions.Elements 메서드가 있습니다. 이러한 두 축을 결합하여 트리의 특정 깊이에서 지정된 이름의 모든 요소를 찾을 수 있습니다.
예: 모든 이름 요소 검색
이 예에서는 XContainer.Elements 및 Extensions.Elements를 사용하여 모든 PurchaseOrder
요소의 모든 Address
요소에서 모든 Name
요소를 검색합니다.
이 예에서는 XML 문서 샘플 XML 파일: 여러 구매 주문서를 사용합니다.
XElement purchaseOrders = XElement.Load("PurchaseOrders.xml");
IEnumerable<XElement> names =
from el in purchaseOrders
.Elements("PurchaseOrder")
.Elements("Address")
.Elements("Name")
select el;
foreach (XElement e in names)
Console.WriteLine(e);
Dim purchaseOrders As XElement = XElement.Load("PurchaseOrders.xml")
Dim names As IEnumerable(Of XElement) = _
From el In purchaseOrders.<PurchaseOrder>.<Address>.<Name> _
Select el
For Each e As XElement In names
Console.WriteLine(e)
Next
이 예제는 다음과 같은 출력을 생성합니다.
<Name>Ellen Adams</Name>
<Name>Tai Yee</Name>
<Name>Cristian Osorio</Name>
<Name>Cristian Osorio</Name>
<Name>Jessica Arnold</Name>
<Name>Jessica Arnold</Name>
이는 Elements
축의 구현 중 하나가 IEnumerable<T>의 XContainer에 대한 확장 메서드이기 때문에 작동합니다. XElement는 XContainer에서 파생되므로 Extensions.Elements 메서드에 대한 호출의 결과에 대해 XContainer.Elements 메서드를 호출할 수 있습니다.
예: 특정 깊이의 모든 요소 검색
중간에 상위 항목이 없을 때 특정 요소 깊이의 모든 요소를 검색하려는 경우가 있습니다. 예를 들어, 다음 문서에서 ConfigParameter
요소의 자식인 모든 Customer
요소를 검색하고 ConfigParameter
요소의 자식인 Root
는 검색하지 않으려고 할 수 있습니다.
<Root>
<ConfigParameter>RootConfigParameter</ConfigParameter>
<Customer>
<Name>Frank</Name>
<Config>
<ConfigParameter>FirstConfigParameter</ConfigParameter>
</Config>
</Customer>
<Customer>
<Name>Bob</Name>
<!--This customer doesn't have a Config element-->
</Customer>
<Customer>
<Name>Bill</Name>
<Config>
<ConfigParameter>SecondConfigParameter</ConfigParameter>
</Config>
</Customer>
</Root>
이렇게 하려면 Extensions.Elements 축을 다음과 같이 사용하면 됩니다.
XElement root = XElement.Load("Irregular.xml");
IEnumerable<XElement> configParameters =
root.Elements("Customer").Elements("Config").
Elements("ConfigParameter");
foreach (XElement cp in configParameters)
Console.WriteLine(cp);
Dim root As XElement = XElement.Load("Irregular.xml")
Dim configParameters As IEnumerable(Of XElement) = _
root.<Customer>.<Config>.<ConfigParameter>
For Each cp As XElement In configParameters
Console.WriteLine(cp)
Next
이 예제는 다음과 같은 출력을 생성합니다.
<ConfigParameter>FirstConfigParameter</ConfigParameter>
<ConfigParameter>SecondConfigParameter</ConfigParameter>
예: 네임스페이스에 있는 XML 요소 검색
다음 예에서는 네임스페이스에 있는 XML에 대한 동일한 기법을 보여 줍니다. 자세한 내용은 네임스페이스 개요를 참조하세요.
이 예에서는 XML 문서 샘플 XML 파일: 네임스페이스의 여러 구매 주문서를 사용합니다.
XNamespace aw = "http://www.adventure-works.com";
XElement purchaseOrders = XElement.Load("PurchaseOrdersInNamespace.xml");
IEnumerable<XElement> names =
from el in purchaseOrders
.Elements(aw + "PurchaseOrder")
.Elements(aw + "Address")
.Elements(aw + "Name")
select el;
foreach (XElement e in names)
Console.WriteLine(e);
Imports <xmlns:aw="http://www.adventure-works.com">
Module Module1
Sub Main()
Dim purchaseOrders As XElement = XElement.Load("PurchaseOrdersInNamespace.xml")
Dim names As IEnumerable(Of XElement) = _
From el In purchaseOrders.<aw:PurchaseOrder>.<aw:Address>.<aw:Name> _
Select el
For Each e As XElement In names
Console.WriteLine(e)
Next
End Sub
End Module
이 예제는 다음과 같은 출력을 생성합니다.
<aw:Name xmlns:aw="http://www.adventure-works.com">Ellen Adams</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Tai Yee</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Cristian Osorio</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Cristian Osorio</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Jessica Arnold</aw:Name>
<aw:Name xmlns:aw="http://www.adventure-works.com">Jessica Arnold</aw:Name>
참고 항목
.NET