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.