Inbäddade uttryck i XML (Visual Basic)
Med inbäddade uttryck kan du skapa XML-literaler som innehåller uttryck som utvärderas vid körning. Syntaxen för ett inbäddat uttryck är <%=
expression
%>
, vilket är samma som syntaxen som används i ASP.NET.
Du kan till exempel skapa en XML-elementliteral som kombinerar inbäddade uttryck med literalt textinnehåll.
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>
Om isbnNumber
innehåller heltal 12345 och modifiedDate
innehåller datumet 3/5/2006, när den här koden körs, är värdet book
för:
<book category="fiction" isbn="12345">
<modifiedDate>3/5/2006</modifiedDate>
</book>
Plats och validering av inbäddade uttryck
Inbäddade uttryck kan bara visas på vissa platser i XML-literaluttryck. Uttryckets plats styr vilka typer av uttryck som kan returneras och hur Nothing
hanteras. I följande tabell beskrivs tillåtna platser och typer av inbäddade uttryck.
Plats i literal | Typ av uttryck | Hantering av Nothing |
---|---|---|
XML-elementnamn | XName | Fel |
XML-elementinnehåll | Object eller matris med Object |
Har ignorerats |
Namn på XML-elementattribut | XName | Fel, såvida inte attributvärdet också är Nothing |
XML-elementattributvärde | Object |
Attributdeklarationen ignoreras |
XML-elementattribut | XAttribute eller en samling XAttribute | Har ignorerats |
XML-dokumentrotelement | XElement eller en samling av ett XElement objekt och ett godtyckligt antal XProcessingInstruction och XComment objekt | Har ignorerats |
Exempel på ett inbäddat uttryck i ett XML-elementnamn:
Dim elementName As String = "contact" Dim contact1 As XElement = <<%= elementName %>/>
Exempel på ett inbäddat uttryck i innehållet i ett XML-element:
Dim contactName As String = "Patrick Hines" Dim contact2 As XElement = <contact><%= contactName %></contact>
Exempel på ett inbäddat uttryck i ett XML-elementattributnamn:
Dim phoneType As String = "home" Dim contact3 As XElement = <contact <%= phoneType %>="206-555-0144"/>
Exempel på ett inbäddat uttryck i ett XML-elementattributvärde:
Dim phoneNumber As String = "206-555-0144" Dim contact4 As XElement = <contact home=<%= phoneNumber %>/>
Exempel på ett inbäddat uttryck i ett XML-elementattribut:
Dim phoneAttribute As XAttribute = New XAttribute(XName.Get(phoneType), phoneNumber) Dim contact5 As XElement = <contact <%= phoneAttribute %>/>
Exempel på ett inbäddat uttryck i ett XML-dokumentrotelement:
Dim document As XDocument = <?xml version="1.0"?><%= contact1 %>
Om du aktiverar Option Strict
kontrollerar kompilatorn att typen av varje inbäddat uttryck vidgas till den typ som krävs. Det enda undantaget gäller rotelementet i ett XML-dokument, som verifieras när koden körs. Om du kompilerar utan Option Strict
kan du bädda in uttryck av typen Object
och deras typ verifieras vid körning.
På platser där innehåll är valfritt ignoreras inbäddade uttryck som innehåller Nothing
. Det innebär att du inte behöver kontrollera att elementinnehåll, attributvärden och matriselement inte Nothing
är innan du använder en XML-literal. Obligatoriska värden, till exempel element- och attributnamn, får inte vara Nothing
.
Mer information om hur du använder ett inbäddat uttryck i en viss typ av literal finns i XML Document Literal, XML-elementliteral.
Omfångsregler
Kompilatorn konverterar varje XML-literal till ett konstruktoranrop för lämplig literaltyp. Literalinnehållet och inbäddade uttryck i en XML-literal skickas som argument till konstruktorn. Det innebär att alla Visual Basic-programmeringselement som är tillgängliga för en XML-literal också är tillgängliga för dess inbäddade uttryck.
I en XML-literal kan du komma åt XML-namnområdesprefixen som deklarerats med -instruktionen Imports
. Du kan deklarera ett nytt XML-namnområdesprefix eller skugga ett befintligt XML-namnområdesprefix i ett element med hjälp xmlns
av attributet. Det nya namnområdet är tillgängligt för de underordnade noderna i det elementet, men inte för XML-literaler i inbäddade uttryck.
Kommentar
När du deklarerar ett XML-namnområdesprefix med hjälp xmlns
av attributet namespace måste attributvärdet vara en konstant sträng. I det här avseendet är att använda xmlns
attributet som att använda -instruktionen Imports
för att deklarera ett XML-namnområde. Du kan inte använda ett inbäddat uttryck för att ange värdet för XML-namnområdet.