Expresiones incrustadas (Visual Basic)
Las expresiones incrustadas permiten crear literales XML que contengan expresiones que se evalúan en tiempo de ejecución. La sintaxis de una expresión incrustada es <%=
expression
%>
, que es la misma que la sintaxis usada en ASP.NET.
Por ejemplo, puede crear un literal de elemento XML, combinando expresiones incrustadas con contenido de texto literal.
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>
Si isbnNumber
contiene el entero 12345 y modifiedDate
contiene la fecha 5/3/2006, cuando se ejecuta este código, el valor de book
es:
<book category="fiction" isbn="12345">
<modifiedDate>3/5/2006</modifiedDate>
</book>
Ubicación y validación de expresiones incrustadas
Las expresiones incrustadas solo pueden aparecer en determinadas ubicaciones dentro de expresiones literales XML. La ubicación de la expresión controla qué tipos puede devolver la expresión y cómo Nothing
se controla. En la tabla siguiente se describen las ubicaciones permitidas y los tipos de expresiones incrustadas.
Ubicación en literal | Tipo de expresión | Control de Nothing |
---|---|---|
Nombre del elemento XML | XName | Error |
Contenido del elemento XML | Object o matriz de Object |
Omitido |
Nombre del atributo del elemento XML | XName | Error, a menos que el valor del atributo también sea Nothing |
Valor del atributo del elemento XML | Object |
Declaración de atributo omitida |
Atributo del elemento XML | XAttribute o una colección de XAttribute | Omitido |
Elemento raíz de documento XML | XElement o una colección de un objeto XElement y un número arbitrario de XProcessingInstruction y XComment objetos | Omitido |
Ejemplo de una expresión incrustada en un nombre de elemento XML:
Dim elementName As String = "contact" Dim contact1 As XElement = <<%= elementName %>/>
Ejemplo de una expresión insertada en el contenido de un elemento XML:
Dim contactName As String = "Patrick Hines" Dim contact2 As XElement = <contact><%= contactName %></contact>
Ejemplo de una expresión incrustada en un nombre de atributo de elemento XML:
Dim phoneType As String = "home" Dim contact3 As XElement = <contact <%= phoneType %>="206-555-0144"/>
Ejemplo de una expresión incrustada en un nombre de atributo de elemento XML:
Dim phoneNumber As String = "206-555-0144" Dim contact4 As XElement = <contact home=<%= phoneNumber %>/>
Ejemplo de una expresión incrustada de atributo de elemento XML:
Dim phoneAttribute As XAttribute = New XAttribute(XName.Get(phoneType), phoneNumber) Dim contact5 As XElement = <contact <%= phoneAttribute %>/>
Ejemplo de una expresión incrustada en un elemento raíz del documento XML:
Dim document As XDocument = <?xml version="1.0"?><%= contact1 %>
Si habilita Option Strict
, el compilador comprueba que el tipo de cada expresión incrustada se amplíe al tipo necesario. La única excepción es para el elemento raíz de un documento XML, que se comprueba cuando se ejecuta el código. Si compila sin Option Strict
, puede insertar expresiones de tipo Object
y su tipo se comprueba en tiempo de ejecución.
En las ubicaciones en las que el contenido es opcional, se omiten las expresiones incrustadas que contienen Nothing
. Esto significa que no es necesario comprobar que el contenido del elemento, los valores de atributo y los elementos de matriz no Nothing
están antes de usar un literal XML. Los valores obligatorios, como los nombres de elemento y atributo, no pueden ser Nothing
.
Para obtener más información sobre el uso de una expresión incrustada en un tipo determinado de literal, vea XML Document Literal, XML Element Literal.
Reglas de ámbito
El compilador convierte cada literal XML en una llamada de constructor para el tipo literal adecuado. El contenido literal y las expresiones incrustadas de un literal XML se pasan como argumentos al constructor. Esto significa que todos los elementos de programación de Visual Basic disponibles para un literal XML también están disponibles para sus expresiones incrustadas.
Dentro de un literal XML, puede tener acceso a los prefijos de espacio de nombres XML declarados con la instrucción Imports
. Puede declarar un nuevo prefijo de espacio de nombres XML, o sombrear un prefijo de espacio de nombres XML existente, en un elemento mediante el atributo xmlns
. El nuevo espacio de nombres está disponible para los nodos secundarios de ese elemento, pero no para literales XML en expresiones incrustadas.
Nota
Al declarar un prefijo de espacio de nombres XML mediante el atributo de espacio de nombres xmlns
, el valor del atributo debe ser una cadena constante. A este respecto, el uso del atributo xmlns
es como usar la instrucción Imports
para declarar un espacio de nombres XML. No se puede usar una expresión incrustada para especificar el valor del espacio de nombres XML.