Expresiones incrustadas en XML
Actualización: noviembre 2007
Las expresiones incrustadas permiten crear literales XML con expresiones que se evalúan en tiempo de ejecución. La sintaxis de una expresión incrustada es <%= expression %>, que es igual que la sintaxis utilizada en ASP.NET.
Por ejemplo, puede crear un literal de elemento XML, combinando las 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 content contiene la cadena "Book of the week", cuando este código se ejecute, el valor de book es:
<book category="fiction" isbn="12345">Book of the week</book>
Ubicación y validación de expresiones incrustadas
Las expresiones incrustadas sólo pueden aparecer en algunas ubicaciones dentro de expresiones literales XML. La ubicación de la expresión controla los tipos de expresiones que se pueden devolver y cómo se controla Nothing. La tabla siguiente describe las ubicaciones permitidas y los tipos de expresiones incrustadas.
Ubicación en literal |
Tipo de expresión |
Control de Nothing |
---|---|---|
Nombre del elemento XML |
Error |
|
Contenido del elemento XML |
Object o matriz de Object |
Se omite |
Nombre del atributo del elemento XML |
Error, a menos que el valor del atributo también sea Nothing |
|
Valor del atributo del elemento XML |
Object |
Se omite la declaración de atributos |
Atributo del elemento XML. |
XAttribute o una colección de XAttribute |
Se omite |
Elemento raíz del documento XML |
XElement o una colección de un objeto XElement y un número arbitrario de objetos XProcessingInstruction y XComment |
Se omite |
Ejemplo de una expresión incrustada en el nombre de un elemento XML:
Dim elementName As String = "contact" Dim contact1 As XElement = <<%= elementName %>/>
Ejemplo de una expresión incrustada 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 el nombre del atributo de un elemento XML:
Dim phoneType As String = "home" Dim contact3 As XElement = _ <contact <%= phoneType %>="206-555-0144"/>
Ejemplo de una expresión incrustada en el valor de un atributo del elemento XML:
Dim phoneNumber As String = "206-555-0144" Dim contact4 As XElement = _ <contact home=<%= phoneNumber %>/>
Ejemplo de una expresión incrustada en el atributo de un 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 el elemento raíz de un 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 el elemento raíz de un documento XML, que se comprueba cuando el código se ejecuta. Si compila sin Option Strict, puede incrustar expresiones de tipo Object y su tipo se comprueba en tiempo de ejecución.
En ubicaciones en las que el contenido es opcional, se omiten las expresiones incrustadas que contienen Nothing. Es decir, no tiene que comprobar ese contenido del elemento, los valores del atributo y los elementos de la matriz no son Nothing antes de utilizar un literal XML. Los valores requeridos, como los nombres de elementos y atributos, no pueden ser Nothing.
Para obtener más información sobre cómo utilizar una expresión incrustada en un tipo determinado de literal, vea Literal de documento XML, Literal de elemento XML.
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 en un literal XML se pasan como argumentos al constructor. Es decir, todos los elementos de programación de Visual Basic disponibles en un literal XML también están disponibles para sus expresiones incrustadas.
En 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 del espacio de nombres XML o sombrear un prefijo del 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 los literales XML de expresiones incrustadas.
Nota: |
---|
Al declarar un prefijo del espacio de nombres XML mediante el atributo de espacio de nombres xmlns, el valor del atributo debe ser una cadena constante. A este respecto, usar el atributo xmlns es como utilizar la instrucción Imports para declarar un espacio de nombres XML. No puede utilizar una expresión incrustada para especificar el valor del espacio de nombres XML. |
Vea también
Conceptos
Información general sobre literales XML
Referencia
Instrucción Imports (Tipo y espacio de nombres de .NET)