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


Встроенные выражения в XML (Visual Basic)

Внедренные выражения позволяют создавать 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 и modifiedDate содержит дату 3/5/2006, когда этот код выполняется, значение book равно:

<book category="fiction" isbn="12345">  
  <modifiedDate>3/5/2006</modifiedDate>  
</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 в них, игнорируются. Это означает, что вам не нужно проверять содержимое элемента, значения атрибутов и элементы массива, Nothing прежде чем использовать XML-литерал. Обязательные значения, такие как имена элементов и атрибутов, не могут быть Nothing.

Дополнительные сведения об использовании внедренного выражения в определенном типе литерала см. в разделе XML Document Literal, XML Element Литерал.

Правила области видимости

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

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

Примечание.

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

См. также