Eingebettete Ausdrücke in XML (Visual Basic)

Eingebettete Ausdrücke ermöglichen Ihnen das Erstellen von XML-Literalen mit Ausdrücken, die zur Laufzeit ausgewertet werden. Die Syntax für einen eingebetteten Ausdruck lautet <%=expression%> und ist somit mit der in ASP.NET verwendeten Syntax identisch.

Sie können beispielsweise ein XML-Elementliteral erstellen, indem Sie eingebettete Ausdrücke mit Literaltextinhalt kombinieren.

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 modifiedDate das Datum 05.03.2006 enthält, weist book bei Ausführung dieses Codes folgenden Wert auf:

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

Positionierung und Validierung eingebetteter Ausdrücke

Eingebettete Ausdrücke können nur an bestimmten Stellen innerhalb von XML-Literalausdrücken eingefügt werden. Die Position des Ausdrucks steuert, 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
Name des XML-Elements XName Fehler
Inhalt des XML-Elements Object oder Array von Object Wird ignoriert.
Name des XML-Elementattributs XName Fehler, es sei denn, der Attributwert ist ebenfalls Nothing
Wert des XML-Elementattributs Object Attributdeklaration ignoriert
XML-Elementattribut XAttribute oder eine Sammlung von XAttribute Wird ignoriert.
Stammelement des XML-Dokuments XElement oder eine Auflistung eines XElement-Objekts und einer beliebigen Anzahl von XProcessingInstruction- und XComment-Objekten Wird ignoriert.
  • Beispiel für einen eingebetteten Ausdruck im Namen eines XML-Elements:

    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 im Namen eines XML-Elementattributs:

    Dim phoneType As String = "home"
    Dim contact3 As XElement = 
      <contact <%= phoneType %>="206-555-0144"/>
    
  • Beispiel für einen eingebetteten Ausdruck im Wert eines XML-Elementattributs:

    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 im Stammelement eines XML-Dokuments:

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

Wenn Sie Option Strict aktivieren, überprüft der Compiler, ob der Typ der einzelnen eingebetteten Ausdrücke auf den erforderlichen Typ erweitert wird. Die einzige Ausnahme gilt für das Stammelement eines XML-Dokuments, das bei Ausführung des Codes überprüft wird. Wenn Sie ohne Option Strict kompilieren, können Sie Ausdrücke vom Typ Object einbetten, und deren Typ wird zur Laufzeit überprüft.

An Stellen, an denen Inhalte optional sind, werden eingebettete Ausdrücke, die Nothing enthalten, ignoriert. Daher müssen Sie nicht sicherstellen, dass Elementinhalt, Attributwerte und Arrayelemente nicht Nothing lauten, bevor Sie ein XML-Literal verwenden. Erforderliche Werte, z. B. Element- und Attributnamen, können nicht Nothing sein.

Weitere Informationen zur Verwendung eines eingebetteten Ausdrucks in einem bestimmten Literaltyp finden Sie unter XML-Dokumentliteral, XML-Elementliteral.

Bereichsregeln

Der Compiler konvertiert jedes XML-Literal in einen Konstruktoraufruf für den entsprechenden Literaltyp. Der Literalinhalt und eingebettete Ausdrücke in einem XML-Literal werden als Argumente an den Konstruktor übergeben. Dies bedeutet, dass alle Visual Basic-Programmierelemente, die für ein XML-Literal verfügbar sind, auch für die eingebetteten Ausdrücke zur Verfügung stehen.

Innerhalb eines XML-Literals können Sie auf die XML-Namespacepräfixe zugreifen, die mit der Imports-Anweisung deklariert wurden. Sie können in einem Element ein neues XML-Namespacepräfix deklarieren oder eine Schattenkopie eines vorhandenen XML-Namespacepräfixes erstellen, indem Sie das Attribut xmlns verwenden. Der neue Namespace ist für die untergeordneten Knoten dieses Elements verfügbar, aber nicht für XML-Literale in eingebetteten Ausdrücken.

Hinweis

Wenn Sie ein XML-Namespacepräfix mithilfe des Namespace-Attributs xmlns deklarieren, muss der Attributwert eine konstante Zeichenfolge sein. In dieser Hinsicht entspricht 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.

Weitere Informationen