Espressioni incorporate in XML (Visual Basic)

Le espressioni incorporate consentono di creare valori letterali XML contenenti espressioni valutate in fase di esecuzione. La sintassi per un'espressione incorporata è <%=expression%>, che corrisponde alla stessa sintassi usata da ASP.NET.

Ad esempio, è possibile creare un valore letterale di un elemento XML, combinando espressioni incorporate con contenuto di testo letterale.

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 contiene l'intero 12345 e modifiedDate contiene la data 3/5/2006, quando questo codice viene eseguito, il valore di book è:

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

Posizione e convalida delle espressioni incorporate

Le espressioni incorporate possono essere visualizzate solo in determinate posizioni all'interno di espressioni letterali XML. La posizione dell'espressione controlla i tipi che l'espressione può restituire e la gestione di Nothing. Nella tabella seguente vengono descritti i percorsi e i tipi consentiti di espressioni incorporate.

Posizione nel valore letterale Tipo di espressione Gestione di Nothing
Nome dell'elemento XML XName Error
Contenuto dell'elemento XML Object o matrice di Object Ignorato
Nome attributo dell'elemento XML XName Errore, a meno che il valore dell'attributo non sia anch'esso Nothing
Valore attributo dell'elemento XML Object Dichiarazione di attributo ignorata
Attributo elemento XML XAttribute è una raccolta di oggetti XAttribute Ignorato
Elemento radice del documento XML XElement o una raccolta di un oggetto XElement e un numero arbitrario di oggetti XProcessingInstruction e XComment Ignorato
  • Esempio di espressione incorporata in un nome di elemento XML:

    Dim elementName As String = "contact"
    Dim contact1 As XElement = <<%= elementName %>/>
    
  • Esempio di espressione incorporata nel contenuto di un elemento XML:

    Dim contactName As String = "Patrick Hines"
    Dim contact2 As XElement = 
      <contact><%= contactName %></contact>
    
  • Esempio di espressione incorporata in un nome di attributo di elemento XML:

    Dim phoneType As String = "home"
    Dim contact3 As XElement = 
      <contact <%= phoneType %>="206-555-0144"/>
    
  • Esempio di espressione incorporata in un valore di attributo di elemento XML:

    Dim phoneNumber As String = "206-555-0144"
    Dim contact4 As XElement = 
      <contact home=<%= phoneNumber %>/>
    
  • Esempio di espressione incorporata in un attributo di elemento XML:

    Dim phoneAttribute As XAttribute = 
      New XAttribute(XName.Get(phoneType), phoneNumber)
    Dim contact5 As XElement = 
      <contact <%= phoneAttribute %>/>
    
  • Esempio di espressione incorporata in un elemento radice del documento XML:

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

Se si abilita Option Strict, il compilatore verifica che il tipo di ogni espressione incorporata venga esteso al tipo richiesto. L'unica eccezione riguarda l'elemento radice di un documento XML, che viene verificata quando viene eseguito il codice. Se si esegue la compilazione senza Option Strict, è possibile incorporare espressioni di tipo Object e il relativo tipo viene verificato in fase di esecuzione.

Nelle posizioni in cui il contenuto è facoltativo, le espressioni incorporate che contengono Nothing vengono ignorate. Ciò significa che non è necessario verificare che il contenuto dell'elemento, i valori degli attributi e gli elementi della matrice non siano Nothing prima di usare un valore letterale XML. I valori obbligatori, ad esempio i nomi degli elementi e degli attributi, non possono essere Nothing.

Per altre informazioni sull'uso di un'espressione incorporata in un particolare tipo di valore letterale, vedere Valore letterale documento XML, Valore letterale elemento XML.

Regole di ambito

Il compilatore converte ogni valore letterale XML in una chiamata del costruttore per il tipo letterale appropriato. Il contenuto letterale e le espressioni incorporate in un valore letterale XML vengono passati come argomenti al costruttore. Ciò significa che tutti gli elementi di programmazione di Visual Basic disponibili per un valore letterale XML sono disponibili anche per le espressioni incorporate.

All'interno di un valore letterale XML è possibile accedere ai prefissi dello spazio dei nomi XML dichiarati con l'istruzione Imports. È possibile dichiarare un nuovo prefisso dello spazio dei nomi XML o nascondere un prefisso dello spazio dei nomi XML esistente in un elemento usando l'attributo xmlns. Il nuovo spazio dei nomi è disponibile per i nodi figlio di tale elemento, ma non per i valori letterali XML nelle espressioni incorporate.

Nota

Quando si dichiara un prefisso dello spazio dei nomi XML usando l'attributo dello spazio dei nomi xmlns, il valore dell'attributo deve essere una stringa costante. A questo proposito, l'uso dell'attributo xmlns è simile all'uso dell'istruzione Imports per dichiarare uno spazio dei nomi XML. Non è possibile utilizzare un'espressione incorporata per specificare il valore dello spazio dei nomi XML.

Vedi anche