다음을 통해 공유


Visual Basic의 XML 리터럴 소개

업데이트: November 2007

이 단원에서는 Visual Basic에서 XML 트리를 만드는 방법에 대해 설명합니다.

LINQ 쿼리의 결과를 XML 트리의 내용으로 사용하는 방법에 대한 자세한 내용은 함수 생성(LINQ to XML)을 참조하십시오.

Visual Basic의 XML 리터럴에 대한 자세한 내용은 Visual Basic의 LINQ to 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>

단순 내용을 사용하여 XElement 만들기

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

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

이 예제의 결과는 다음과 같습니다.

<Customer>Adventure Works</Customer>

빈 요소 만들기

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

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

이 예제의 결과는 다음과 같습니다.

<Customer />

포함 식 사용

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

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

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

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

Dim 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 is 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

참고 항목

개념

XML 트리 만들기