Введение в XML-литералы в Visual Basic
Этот раздел содержит сведения о создании XML-деревьев в Visual Basic.
Для получения информации об использовании результатов запросов LINQ как содержимого XML-дерева см. раздел Функциональное построение (LINQ to XML).
Дополнительные сведения о XML-литералах в Visual Basic см. в разделе Общие сведения о LINQ to XML в Visual Basic.
Создание деревьев 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