Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Внедренные выражения позволяют создавать 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.