Visual Basic의 XML 리터럴(LINQ to XML)

이 문서에서는 XML 리터럴과 포함된 식을 사용하여 Visual Basic에서 XML 트리를 만드는 방법에 대한 정보를 제공합니다.

예: XML 리터럴을 사용하여 XML 트리 만들기

다음 예에서는 XML 리터럴을 사용하여 XElement(이 경우에는 contacts)을 만드는 방법을 보여 줍니다.

Dim contacts As XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone>206-555-0144</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

예: XML 리터럴을 사용하여 간단한 콘텐츠로 XElement 만들기

다음과 같이 단순 내용이 포함된 XElement를 만들 수 있습니다.

Dim n as XElement = <Customer>Adventure Works</Customer>
Console.WriteLine(n)

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

<Customer>Adventure Works</Customer>

예: XML 리터럴을 사용하여 빈 요소 만들기

다음과 같이 빈 XElement를 만들 수 있습니다.

Dim n As XElement = <Customer/>
Console.WriteLine(n)

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

<Customer />

포함된 식을 사용하여 콘텐츠 만들기

XML 리터럴의 중요한 특징은 포함 식을 허용한다는 점입니다. 포함 식을 통해 식을 계산하고 식의 결과를 XML 트리에 삽입할 수 있습니다. 식이 XElement 형식으로 계산되면 요소가 트리에 삽입되고, 식이 XAttribute 형식으로 계산되면 특성이 트리에 삽입됩니다. 유효한 경우에만 요소와 특성을 트리에 삽입할 수 있습니다.

단일 식만 포함 식에 들어갈 수 있는 점을 명심해야 합니다. 여러 문을 포함할 수 없습니다. 식이 한 줄을 넘으면 줄 연속 문자를 사용해야 합니다.

포함 식을 사용하여 기존 노드(요소 포함)와 특성을 새 XML 트리에 추가하는 경우 기존 노드에 이미 부모가 있으면 노드가 복제됩니다. 새로 복제된 노드는 새 XML 트리에 추가됩니다. 기존 노드에 부모가 없으면 노드가 새 XML 트리에 추가되기만 합니다. 이 문서의 마지막 예에서는 이를 보여 줍니다.

예: 포함된 식을 사용하여 요소 포함

다음 예제에서는 포함 식을 사용하여 요소를 트리에 삽입합니다.

xmlTree1 As XElement = _
    <Root>
        <Child>Contents</Child>
    </Root>
Dim xmlTree2 As XElement = _
    <Root>
        <%= xmlTree1.<Child> %>
    </Root>
Console.WriteLine(xmlTree2)

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

<Root>
  <Child>Contents</Child>
</Root>

예: 콘텐츠에 포함된 식 사용

포함 식을 사용하여 요소의 내용을 제공할 수 있습니다.

Dim str As String
str = "Some content"
Dim root As XElement = <Root><%= str %></Root>
Console.WriteLine(root)

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

<Root>Some content</Root>

예: 포함된 식에서 LINQ 쿼리 사용

LINQ 쿼리 결과를 사용하여 요소의 콘텐츠를 제공할 수 있습니다.

Dim arr As Integer() = {1, 2, 3}

Dim n As XElement = _
    <Root>
        <%= From i In arr Select <Child><%= i %></Child> %>
    </Root>

Console.WriteLine(n)

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

<Root>
  <Child>1</Child>
  <Child>2</Child>
  <Child>3</Child>
</Root>

예: 포함된 식을 사용하여 노드 이름 제공

또한 포함된 식을 사용하여 특성 이름, 특성 값, 요소 이름 및 요소 값을 계산할 수도 있습니다.

Dim eleName As String = "ele"
Dim attName As String = "att"
Dim attValue As String = "aValue"
Dim eleValue As String = "eValue"
Dim n As XElement = _
    <Root <%= attName %>=<%= attValue %>>
        <<%= eleName %>>
            <%= eleValue %>
        </>
    </Root>
Console.WriteLine(n)

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

<Root att="aValue">
  <ele>eValue</ele>
</Root>

예: 포함된 식을 사용하여 노드 복제 및 연결

앞서 언급했듯이 포함된 식을 사용하여 기존 노드(요소 포함)와 특성을 새 XML 트리에 추가하고 추가되는 노드가 이미 부모 노드인 경우 노드가 복제되고 복제본이 새 XML 트리에 연결됩니다. 기존 노드가 부모 노드가 아닌 경우 새 XML 트리에 연결됩니다.

다음 코드에서는 부모가 있는 요소를 트리에 추가할 때의 동작과 부모가 없는 요소를 트리에 추가할 때의 동작을 보여 줍니다.

' Create a tree with a child element.
Dim xmlTree1 As XElement = _
    <Root>
        <Child1>1</Child1>
    </Root>

' Create an element that's not parented.
Dim child2 As XElement = <Child2>2</Child2>

' Create a tree and add Child1 and Child2 to it.
Dim xmlTree2 As XElement = _
    <Root>
        <%= xmlTree1.<Child1>(0) %>
        <%= child2 %>
    </Root>

' Compare Child1 identity.
Console.WriteLine("Child1 was {0}", _
    IIf(xmlTree1.Element("Child1") Is xmlTree2.Element("Child1"), _
    "attached", "cloned"))

' Compare Child2 identity.
Console.WriteLine("Child2 was {0}", _
    IIf(child2 Is xmlTree2.Element("Child2"), _
    "attached", "cloned"))

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

Child1 was cloned
Child2 was attached

참고 항목