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.

Consulte también