Общие сведения об XML-литералах (Visual Basic)
Xml-литерал позволяет напрямую внедрять XML-код в код Visual Basic. Синтаксис литерала XML представляет объекты LINQ to XML, и он аналогичен синтаксису XML 1.0. Это упрощает создание XML-элементов и документов программным способом, так как код имеет ту же структуру, что и окончательный XML.
Visual Basic компилирует XML-литералы в объекты LINQ to XML. LINQ to XML предоставляет простую объектную модель для создания и управления XML, и эта модель хорошо интегрируется с языковым интегрированным запросом (LINQ). Дополнительные сведения см. в разделе XElement.
Выражение Visual Basic можно внедрить в XML-литерал. Во время выполнения приложение создает объект LINQ to XML для каждого литерала, включив значения внедренных выражений. Это позволяет указать динамическое содержимое внутри XML-литерала. Дополнительные сведения см. в разделе "Внедренные выражения" в ФОРМАТЕ XML.
Дополнительные сведения о различиях между синтаксисом XML-литерала и синтаксисом XML 1.0 см. в xml-литералах и спецификации XML 1.0.
Простые литералы
Вы можете создать объект LINQ to XML в коде Visual Basic, введя или вставив допустимый XML-код. Литерал XML-элемента возвращает XElement объект. Дополнительные сведения см. в разделе "Литералы XML-элемента" и "XML-литералы " и спецификация XML 1.0. В следующем примере создается XML-элемент с несколькими дочерними элементами.
Dim contact1 As XElement =
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>
Xml-документ можно создать, запуская XML-литерал с <?xml version="1.0"?>
помощью, как показано в следующем примере. Литерал XML-документа возвращает XDocument объект. Дополнительные сведения см. в литерале XML-документа.
Dim contactDoc As XDocument =
<?xml version="1.0"?>
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>
Примечание.
Синтаксис XML-литерала в Visual Basic не идентичен синтаксису в спецификации XML 1.0. Дополнительные сведения см. в разделе XML-литералы и спецификация XML 1.0.
Продолжение строки
Xml-литерал может охватывать несколько строк без использования символов продолжения строки (последовательность пробела-подчеркивания). Это упрощает сравнение XML-литералы в коде с XML-документами.
Компилятор обрабатывает символы продолжения строки как часть XML-литерала. Поэтому следует использовать последовательность ввода пробела, только если она принадлежит в объекте LINQ to XML.
Тем не менее, если в внедренном выражении имеется многостроочное выражение, вам потребуется продолжение строк. Дополнительные сведения см. в разделе "Внедренные выражения" в ФОРМАТЕ XML.
Внедрение запросов в XML-литералы
Запрос можно использовать в внедренном выражении. При этом элементы, возвращаемые запросом, добавляются в XML-элемент. Это позволяет добавить динамическое содержимое, например результат запроса пользователя, в XML-литерал.
Например, следующий код использует внедренный запрос для создания XML-элементов из элементов phoneNumbers2
массива, а затем добавления этих элементов в качестве дочерних contact2
элементов.
Public Class XmlSamples
Public Sub Main()
' Initialize the objects.
Dim phoneNumbers2 As Phone() = {
New Phone("home", "206-555-0144"),
New Phone("work", "425-555-0145")}
' Convert the data contained in phoneNumbers2 to XML.
Dim contact2 =
<contact>
<name>Patrick Hines</name>
<%= From p In phoneNumbers2
Select <phone type=<%= p.Type %>><%= p.Number %></phone>
%>
</contact>
Console.WriteLine(contact2)
End Sub
End Class
Class Phone
Public Type As String
Public Number As String
Public Sub New(ByVal t As String, ByVal n As String)
Type = t
Number = n
End Sub
End Class
Как компилятор создает объекты из XML-литерала
Компилятор Visual Basic преобразует XML-литералы в вызовы эквивалентных конструкторов LINQ to XML для создания объекта LINQ to XML. Например, компилятор Visual Basic преобразует следующий пример кода в вызов XProcessingInstruction конструктора инструкции xml-версии, вызовы XElement конструктора для конструктора для <contact>
элемента , <name>
а также элементы и <phone>
вызовы XAttribute конструктора для атрибута type
. В частности, учитывая атрибуты в следующем примере, компилятор Visual Basic будет вызывать XAttribute(XName, Object) конструктор дважды. Первый будет передавать значение type
параметра name
и значение home
параметра value
. Второй также передает значение type
параметра name
, но значение work
параметра value
.
Dim contactDoc As XDocument =
<?xml version="1.0"?>
<contact>
<name>Patrick Hines</name>
<phone type="home">206-555-0144</phone>
<phone type="work">425-555-0145</phone>
</contact>