Встроенные выражения в 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.