함수 생성(LINQ to XML)

LINQ to XML은 함수 생성이라는 XML 요소를 만드는 강력한 방법을 제공합니다. 함수 생성을 사용하면 단일 문으로 XML 트리를 만들 수 있습니다.

LINQ to XML 프로그래밍 인터페이스의 몇 가지 주요 기능은 함수 생성에 사용됩니다.

  • XElement 생성자는 내용에 대한 다양한 형식의 인수를 사용합니다. 예를 들어, 자식 요소가 되는 다른 XElement 개체를 전달할 수 있으며 요소의 특성이 되는 XAttribute 개체를 전달할 수 있습니다. 또는 문자열로 변환되고 요소의 텍스트 내용이 되는 다른 모든 형식의 개체를 전달할 수 있습니다.
  • XElement 생성자는 params 형식의 Object 배열을 사용하므로 생성자에 개수에 관계없이 개체를 전달할 수 있습니다. 따라서 복잡한 내용을 가진 요소를 만들 수 있습니다.
  • 개체가 IEnumerable<T>을 구현하는 경우 개체의 컬렉션이 열거되고 컬렉션의 모든 항목이 추가됩니다. 컬렉션에 XElement 또는 XAttribute 개체가 포함되어 있으면 컬렉션의 각 항목이 개별적으로 추가됩니다. 이것은 LINQ 쿼리의 결과를 생성자에 전달할 수 있도록 하기 때문에 중요합니다.

예: XML 트리 만들기

함수 생성을 사용하여 XML 트리를 만드는 코드를 작성할 수 있습니다. 다음은 이에 대한 예입니다.

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144"),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

예: LINQ 쿼리 결과를 사용하여 XML 트리 만들기

또한 이러한 기능을 사용하면 다음 예와 같이 XML 트리를 만들 때 LINQ 쿼리 결과를 사용하는 코드를 작성할 수 있습니다.

XElement srcTree = new XElement("Root",
    new XElement("Element", 1),
    new XElement("Element", 2),
    new XElement("Element", 3),
    new XElement("Element", 4),
    new XElement("Element", 5)
);
XElement xmlTree = new XElement("Root",
    new XElement("Child", 1),
    new XElement("Child", 2),
    from el in srcTree.Elements()
    where (int)el > 2
    select el
);
Console.WriteLine(xmlTree);

Visual Basic에서는 XML 리터럴을 사용하여 동일한 작업을 수행합니다.

Dim srcTree As XElement = _
    <Root>
        <Element>1</Element>
        <Element>2</Element>
        <Element>3</Element>
        <Element>4</Element>
        <Element>5</Element>
    </Root>
Dim xmlTree As XElement = _
    <Root>
        <Child>1</Child>
        <Child>2</Child>
        <%= From el In srcTree.Elements() _
            Where CInt(el) > 2 _
            Select el %>
    </Root>
Console.WriteLine(xmlTree)

이 예제는 다음과 같은 출력을 생성합니다.

<Root>
  <Child>1</Child>
  <Child>2</Child>
  <Element>3</Element>
  <Element>4</Element>
  <Element>5</Element>
</Root>

참고 항목