Eingebettete Ausdrücke in XML
Aktualisiert: November 2007
Mit eingebetteten Ausdrücken können XML-Literale erstellt werden, die Ausdrücke enthalten, welche zur Laufzeit ausgewertet werden. Die Syntax für einen eingebetteten Ausdruck ist <%= expression %>. Sie stimmt mit der in ASP.NET verwendeten Syntax überein.
Beispielsweise können XML-Elementliterale erstellt und so eingebettete Ausdrücke mit Literaltextinhalt kombiniert werden.
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>
Wenn isbnNumber die ganze Zahl 12345 und content die Zeichenfolge "Book of the week" enthält, hat nach der Ausführung des Codes book den Wert:
<book category="fiction" isbn="12345">Book of the week</book>
Position und Validierung eingebetteter Ausdrücke
Eingebettete Ausdrücke können nur an bestimmten Positionen in XML-Literalausdrücken stehen. Die Position des Ausdrucks legt fest, welche Typen der Ausdruck zurückgeben kann und wie Nothing behandelt wird. In der folgenden Tabelle werden die zulässigen Positionen und Typen eingebetteter Ausdrücke beschrieben.
Position im Literal |
Ausdruckstyp |
Behandlung von Nothing |
---|---|---|
XML-Elementname |
Fehler |
|
XML-Elementinhalt |
Object oder Array von Object |
Ignoriert |
XML-Element-Attributname |
Fehler, außer wenn der Attributwert auch Nothing ist |
|
XML-Element-Attributwert |
Object |
Attributdeklaration wird ignoriert |
XML-Elementattribut |
XAttribute oder eine Auflistung von XAttribute |
Ignoriert |
XML-Dokument-Stammelement |
XElement oder eine Auflistung eines XElement-Objekts und einer beliebigen Anzahl von XProcessingInstruction-Objekten und XComment-Objekten |
Ignoriert |
Beispiel für einen eingebetteten Ausdruck in einem XML-Elementnamen:
Dim elementName As String = "contact" Dim contact1 As XElement = <<%= elementName %>/>
Beispiel für einen eingebetteten Ausdruck im Inhalt eines XML-Elements:
Dim contactName As String = "Patrick Hines" Dim contact2 As XElement = _ <contact><%= contactName %></contact>
Beispiel für einen eingebetteten Ausdruck in einem XML-Element-Attributnamen:
Dim phoneType As String = "home" Dim contact3 As XElement = _ <contact <%= phoneType %>="206-555-0144"/>
Beispiel für einen eingebetteten Ausdruck in einem XML-Element-Attributwert:
Dim phoneNumber As String = "206-555-0144" Dim contact4 As XElement = _ <contact home=<%= phoneNumber %>/>
Beispiel für einen eingebetteten Ausdruck in einem XML-Elementattribut:
Dim phoneAttribute As XAttribute = _ New XAttribute(XName.Get(phoneType), phoneNumber) Dim contact5 As XElement = _ <contact <%= phoneAttribute %>/>
Beispiel für einen eingebetteten Ausdruck in einem XML-Dokument-Stammelement:
Dim document As XDocument = _ <?xml version="1.0"?><%= contact1 %>
Wenn Option Strict aktiviert ist, überprüft der Compiler, ob der Typ jedes eingebetteten Ausdrucks auf den erforderlichen Typ erweitert wird. Die einzige Ausnahme davon ist das Stammelement eines XML-Dokuments, das während der Ausführung des Codes überprüft wird. Wenn ohne Option Strict kompiliert wird, können Ausdrücke vom Typ Object eingebettet werden, und deren Typ wird während der Laufzeit überprüft.
An Positionen, an denen Inhalt optional ist, werden eingebettete Ausdrücke, die Nothing enthalten, ignoriert. Das bedeutet, dass vor der Verwendung eines XML-Literals nicht überprüft werden muss, ob Elementinhalt, Attributwerte und Arrayelemente Nothing sind. Erforderliche Werte, z. B. Element- und Attributnamen, können nicht Nothing sein.
Weitere Informationen über die Verwendung von eingebetteten Ausdrücken in Literalen eines bestimmten Typs finden Sie unter XML-Dokumentliteral, XML-Elementliteral.
Bereichsregeln
Der Compiler konvertiert jedes XML-Literal in einen Konstruktoraufruf des entsprechenden Literaltyps. Der Literalinhalt und eingebettete Ausdrücke in einem XML-Literal werden dem Konstruktor als Argumente übergeben. Das bedeutet, dass sämtliche für XML-Literale verfügbare Visual Basic-Programmierelemente auch für deren eingebettete Ausdrücke verfügbar sind.
Innerhalb eines XML-Literals kann auf die mit der Imports-Anweisung deklarierten XML-Namespacepräfixe zugegriffen werden. Mit dem xmlns-Attribut kann in einem Element ein neues XML-Namespacepräfix deklariert oder Shadowing für ein existierendes XML-Namespacepräfix durchgeführt werden. Der neue Namespace ist für untergeordnete Knoten, nicht jedoch für XML-Literale in eingebetteten Ausdrücken verfügbar.
Hinweis: |
---|
Wenn ein XML-Namespacepräfix mit dem xmlns-Namespace-Attribut deklariert wird, muss der Attributwert eine konstante Zeichenfolge sein. Unter diesem Gesichtspunkt gleicht die Verwendung des xmlns-Attributs der Verwendung der Imports-Anweisung zum Deklarieren eines XML-Namespace. Sie können keinen eingebetteten Ausdruck verwenden, um den XML-Namespacewert anzugeben. |
Siehe auch
Konzepte
Referenz
Imports-Anweisung (.NET-Namespace und Typ)