Встроенные выражения в XML

Обновлен: Ноябрь 2007

Встроенные выражения позволяют создать XML-литералы, содержащие выражения, которые вычисляются во время выполнения. Синтаксис для встроенных выражений следующий: <%=expression %>, который совпадает с синтаксисом, используемым в ASP.NET.

Например, можно создать XML-литерал, объединяющий встроенные выражения с содержимым текста.

Dim isbnNumber As String = "12345"
Dim modifiedDate As String = "3/5/2006"
Dim book As XElement = _
    <book category="fiction" isbn=<%= isbnNumber %>>
        <modifiedDate><%= modifiedDate %></modifiedDate>
    </book>

Если isbnNumber содержит целое число 12345 и content содержит строку "Book of the week", то при выполнении этого кода значение book будет:

<book category="fiction" isbn="12345">Book of the week</book>

Расположение и проверка встроенных выражений

Встроенные выражения могут располагаться только на определенных местах внутри текстовых XML выражений. Расположение выражения определяет типы значений, которые могут возвращать выражения, и порядок обработки ключевого слова Nothing. В следующей таблице предоставлены разрешенные расположения и типы встроенных выражений.

Расположение в литерале

Тип выражения

Обработка Nothing

Имя XML-элемента

XName

Ошибка

Содержимое XML-элемента

Элемент Object или массив элементов Object

Игнорируется

Имя атрибута XML-элемента

XName

Ошибка, если значение атрибута не является также Nothing

Значение атрибута XML-элемента

Object

Объявление атрибута игнорируется

Атрибут XML-элемента

Объект класса XAttribute или коллекция объектов XAttribute

Игнорируется

Корневой элемент XML-документа

Объект класса XElement или коллекция из одного объекта класса XElement и произвольного числа объектов класса XProcessingInstruction и XComment

Игнорируется

  • Пример встроенного выражения в имени XML-элемента:

    Dim elementName As String = "contact"
    Dim contact1 As XElement = <<%= elementName %>/>
    
  • Пример встроенного выражения в содержимом XML-элемента:

    Dim contactName As String = "Patrick Hines"
    Dim contact2 As XElement = _
      <contact><%= contactName %></contact>
    
  • Пример встроенного выражения в имени атрибута XML-элемента:

    Dim phoneType As String = "home"
    Dim contact3 As XElement = _
      <contact <%= phoneType %>="206-555-0144"/>
    
  • Пример встроенного выражения в значении атрибута XML-элемента:

    Dim phoneNumber As String = "206-555-0144"
    Dim contact4 As XElement = _
      <contact home=<%= phoneNumber %>/>
    
  • Пример встроенного выражения в атрибуте XML-элемента:

    Dim phoneAttribute As XAttribute = _
      New XAttribute(XName.Get(phoneType), phoneNumber)
    Dim contact5 As XElement = _
      <contact <%= phoneAttribute %>/>
    
  • Пример встроенного выражения в корневом элементе XML-документа:

    Dim document As XDocument = _
      <?xml version="1.0"?><%= contact1 %>
    

Если разрешено использование ключевого слова Option Strict, то компилятор проверяет, можно ли расширить тип каждого встроенного выражения до требуемого типа. Единственным исключением является корневой элемент XML-документа, который проверяется при выполнении кода. Если выполнить компиляцию без ключевого слова Option Strict, то можно внедрить выражения типа Object, и их тип будет проверяться во время выполнения.

В местах, где содержимое является необязательным, встроенные выражения, содержащие Nothing, игнорируются. Это означает, что перед использованием XML-литерала можно не проверять содержимое элемента, значения атрибутов и элементы массива, которые не содержат значения Nothing. Необходимые значения, такие как имена элементов и атрибутов, не могут быть Nothing.

Дополнительные сведения об использовании встроенного выражения в литерале определенного типа см. в разделе XML-литерал документа, Литеральное представление XML-элемента.

Правила обзора данных

Компилятор преобразует каждый XML-литерал в вызов конструктора для соответствующего типа литерала. Компилятор преобразует каждый XML-литерал в вызов конструктора для соответствующего типа литерала. Это означает, что все элементы программирования Visual Basic, доступные для XML-литерала, также доступны для его встроенных выражений.

В XML-литерале можно использовать префиксы пространства имен XML, объявляемые с помощью инструкции Imports. Можно объявить новый префикс пространства имен XML или переопределить существующий XML-префикс в элементе с помощью атрибута xmlns. Новое пространство имен является доступным для дочерних узлов таких элементов, но не для XML-литералов во встроенных выражениях.

Bb384964.alert_note(ru-ru,VS.90).gifПримечание.

При объявлении префикса пространства имен XML с помощью атрибута пространства имен xmlns значение атрибута должно быть константной строкой. В этом смысле, использование атрибута xmlns аналогично использованию инструкции Imports для объявления пространства имен XML. Встроенные выражения нельзя использовать для указания значения пространства имен XML.

См. также

Основные понятия

Общие сведения о XML-литералах

Ссылки

XML-литерал документа

Литеральное представление XML-элемента

Оператор Option Strict

Оператор Imports (пространство имен .NET и тип)

Другие ресурсы

Создание XML в Visual Basic