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


Общие сведения о 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, и эта модель хорошо интегрируется с Language-Integrated запросом (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 Document Literal.

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>

См. также