다음을 통해 공유


축 메서드 호출을 연결하는 방법(LINQ to XML)

코드에 사용할 수 있는 일반적인 방법은 축 메서드를 호출한 다음 확장명 메서드 축 중 하나를 호출하는 것입니다.

요소의 컬렉션을 반환하며 Elements의 이름이 포함된 두 축인 XContainer.Elements 메서드와 Extensions.Elements 메서드가 있습니다. 이러한 두 축을 결합하여 트리의 특정 깊이에서 지정된 이름의 모든 요소를 찾을 수 있습니다.

예: 모든 이름 요소 검색

이 예에서는 XContainer.ElementsExtensions.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에 대한 확장 메서드이기 때문에 작동합니다. XElementXContainer에서 파생되므로 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>

참고 항목