Compartilhar via


Expressões inseridas no XML (Visual Basic)

Expressões inseridas permitem criar literais XML que contêm expressões avaliadas em tempo de execução. A sintaxe de uma expressão incorporada é <%= expression %>, que é a mesma sintaxe usada no ASP.NET.

Por exemplo, você pode criar um literal de elemento XML, combinando expressões inseridas com conteúdo 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>

Se isbnNumber contiver o inteiro 12345 e modifiedDate contiver a data 3/5/2006, quando esse código for executado, o valor será book :

<book category="fiction" isbn="12345">  
  <modifiedDate>3/5/2006</modifiedDate>  
</book>  

Local e validação da expressão inserida

Expressões inseridas só podem aparecer em determinados locais dentro de expressões literais XML. O local da expressão controla quais tipos a expressão pode retornar e como Nothing é tratada. A tabela a seguir descreve os locais e tipos permitidos de expressões inseridas.

Local no literal Tipo de expressão Manipulação de Nothing
Nome do elemento XML XName Erro
Conteúdo do elemento tipado Object ou matriz de Object Ignored
Nome do atributo do elemento XML XName Erro, a menos que o valor do atributo também seja Nothing
Valor do atributo do elemento XML Object Declaração de atributo ignorada
Atributo do elemento XML XAttribute ou uma coleção de XAttribute Ignored
Elemento raiz do documento XML XElementou uma coleção de um XElement objeto e um número arbitrário de XProcessingInstruction objetos XComment Ignored
  • Exemplo de uma expressão inserida em um nome de elemento XML:

    Dim elementName As String = "contact"
    Dim contact1 As XElement = <<%= elementName %>/>
    
  • Exemplo de uma expressão inserida no conteúdo de um elemento XML:

    Dim contactName As String = "Patrick Hines"
    Dim contact2 As XElement = 
      <contact><%= contactName %></contact>
    
  • Exemplo de uma expressão inserida em um nome de atributo de elemento XML:

    Dim phoneType As String = "home"
    Dim contact3 As XElement = 
      <contact <%= phoneType %>="206-555-0144"/>
    
  • Exemplo de uma expressão inserida em um valor de atributo de elemento XML:

    Dim phoneNumber As String = "206-555-0144"
    Dim contact4 As XElement = 
      <contact home=<%= phoneNumber %>/>
    
  • Exemplo de uma expressão inserida em um atributo de elemento XML:

    Dim phoneAttribute As XAttribute = 
      New XAttribute(XName.Get(phoneType), phoneNumber)
    Dim contact5 As XElement = 
      <contact <%= phoneAttribute %>/>
    
  • Exemplo de uma expressão inserida em um elemento raiz do documento XML:

    Dim document As XDocument = 
      <?xml version="1.0"?><%= contact1 %>
    

Se você habilitar Option Strict, o compilador verificará se o tipo de cada expressão inserida é ampliado para o tipo necessário. A única exceção é para o elemento raiz de um documento XML, que é verificado quando o código é executado. Se você compilar sem Option Strict, poderá inserir expressões do tipo Object e seu tipo será verificado em tempo de execução.

Em locais em que o conteúdo é opcional, as expressões inseridas que contêm Nothing são ignoradas. Isso significa que você não precisa verificar se o conteúdo do elemento, os valores de atributo e os elementos de matriz não Nothing estão antes de usar um literal XML. Valores necessários, como nomes de elemento e atributo, não podem ser Nothing.

Para obter mais informações sobre como usar uma expressão inserida em um tipo específico de literal, consulte Literal do Documento XML, Literal do Elemento XML.

Regras de escopo

O compilador converte cada literal XML em uma chamada de construtor para o tipo literal apropriado. O conteúdo literal e as expressões inseridas em um literal XML são passados como argumentos para o construtor. Isso significa que todos os elementos de programação do Visual Basic disponíveis para um literal XML também estão disponíveis para suas expressões inseridas.

Em um literal XML, você pode acessar os prefixos de namespace XML declarados com a instrução Imports. Você pode declarar um novo prefixo de namespace XML ou sombrear um prefixo de namespace XML existente, em um elemento usando o atributo xmlns. O novo namespace está disponível para os nós filho desse elemento, mas não para literais XML em expressões inseridas.

Observação

Quando você declara um prefixo de namespace XML usando o atributo xmlns namespace, o valor do atributo deve ser uma cadeia de caracteres constante. Nesse sentido, usar o atributo xmlns é como usar a instrução Imports para declarar um namespace XML. Você não pode usar uma expressão inserida para especificar o valor do namespace XML.

Confira também