Поделиться через


XML-литералы в Visual Basic (LINQ to XML)

В этой статье содержатся сведения о создании деревьев XML в Visual Basic с помощью XML-литерала и внедренных выражений.

Пример. Использование XML-литерала для создания xml-дерева

В следующем примере показано, как создать XElement(в данном случае contacts) с XML-литералами:

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

См. также