Встроенные выражения в 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-элемента |
Ошибка |
|
Содержимое XML-элемента |
Элемент Object или массив элементов Object |
Игнорируется |
Имя атрибута XML-элемента |
Ошибка, если значение атрибута не является также 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-литералов во встроенных выражениях.
Примечание. |
---|
При объявлении префикса пространства имен XML с помощью атрибута пространства имен xmlns значение атрибута должно быть константной строкой. В этом смысле, использование атрибута xmlns аналогично использованию инструкции Imports для объявления пространства имен XML. Встроенные выражения нельзя использовать для указания значения пространства имен XML. |
См. также
Основные понятия
Общие сведения о XML-литералах
Ссылки
Литеральное представление XML-элемента
Оператор Imports (пространство имен .NET и тип)