Expresiones incrustadas (Visual Basic)

Las expresiones incrustadas le permiten crear literales XML que contienen 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 que se usa 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 3/5/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 de elemento XML XAttribute o una colección de XAttribute Omitido
Elemento raíz del documento XML XElement o una colección de un XElement objeto y un número arbitrario de XProcessingInstruction XComment objetos y 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 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 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 valor 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 en un 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 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 insertada se amplía al tipo requerido. 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 incrustar expresiones de tipo Object y su tipo se comprueba en tiempo de ejecución.

En ubicaciones donde el contenido es opcional, se omiten las expresiones incrustadas que contienen Nothing . Esto significa que no es necesario comprobar que el contenido de los elementos, los valores de atributo y los elementos de matriz no son Nothing antes de usar un literal XML. Los valores obligatorios, como los nombres de elementos y atributos, 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 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 de literal adecuado. El contenido literal y las expresiones incrustadas en un literal XML se pasan como argumentos al constructor. Esto significa que todos los elementos de programación 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 Imports instrucción. Puede declarar un nuevo prefijo de espacio de nombres XML, u ocultar un prefijo de espacio de nombres XML existente, en un elemento mediante el xmlns atributo. El nuevo espacio de nombres está disponible para los nodos secundarios de ese elemento, pero no para los literales XML de las expresiones incrustadas.

Nota

Al declarar un prefijo de espacio de nombres XML mediante el xmlns atributo de espacio de nombres, el valor de atributo debe ser una cadena constante. En este sentido, el uso del xmlns atributo es como usar la Imports instrucción para declarar un espacio de nombres XML. No se puede usar una expresión insertada para especificar el valor del espacio de nombres XML.

Consulte también