Wyrażenia osadzone w XML (Visual Basic)

Wyrażenia osadzone umożliwiają tworzenie literałów XML zawierających wyrażenia obliczane w czasie wykonywania. Składnia osadzonego wyrażenia to <%=expression%>, która jest taka sama jak składnia używana w ASP.NET.

Można na przykład utworzyć literał elementu XML, łącząc wyrażenia osadzone z zawartością tekstu literału.

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>

Jeśli isbnNumber zawiera liczbę całkowitą 12345 i modifiedDate zawiera datę 3.5.2006, po wykonaniu tego kodu wartość book to:

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

Lokalizacja i walidacja wyrażeń osadzonych

Wyrażenia osadzone mogą być wyświetlane tylko w określonych lokalizacjach w wyrażeniach literału XML. Lokalizacja wyrażenia steruje typami wyrażenia, które mogą zwracać i jak Nothing jest obsługiwane. W poniższej tabeli opisano dozwolone lokalizacje i typy osadzonych wyrażeń.

Lokalizacja w literału Typ wyrażenia Obsługa Nothing
Nazwa elementu XML XName Błąd
Zawartość elementu XML Object lub tablica Object Zignorowane
Nazwa atrybutu elementu XML XName Błąd, chyba że wartość atrybutu również jest Nothing
Wartość atrybutu elementu XML Object Ignorowana deklaracja atrybutu
Atrybut elementu XML XAttribute lub kolekcja XAttribute Zignorowane
Element główny dokumentu XML XElementlub kolekcja jednego XElement obiektu oraz dowolna liczba XProcessingInstruction obiektów i XComment Zignorowane
  • Przykład wyrażenia osadzonego w nazwie elementu XML:

    Dim elementName As String = "contact"
    Dim contact1 As XElement = <<%= elementName %>/>
    
  • Przykład osadzonego wyrażenia w zawartości elementu XML:

    Dim contactName As String = "Patrick Hines"
    Dim contact2 As XElement = 
      <contact><%= contactName %></contact>
    
  • Przykład wyrażenia osadzonego w nazwie atrybutu elementu XML:

    Dim phoneType As String = "home"
    Dim contact3 As XElement = 
      <contact <%= phoneType %>="206-555-0144"/>
    
  • Przykład osadzonego wyrażenia w wartości atrybutu elementu XML:

    Dim phoneNumber As String = "206-555-0144"
    Dim contact4 As XElement = 
      <contact home=<%= phoneNumber %>/>
    
  • Przykład wyrażenia osadzonego w atrybucie elementu XML:

    Dim phoneAttribute As XAttribute = 
      New XAttribute(XName.Get(phoneType), phoneNumber)
    Dim contact5 As XElement = 
      <contact <%= phoneAttribute %>/>
    
  • Przykład osadzonego wyrażenia w elemecie głównym dokumentu XML:

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

Jeśli włączysz Option Strictfunkcję , kompilator sprawdza, czy typ każdego osadzonego wyrażenia rozszerza się do wymaganego typu. Jedynym wyjątkiem jest element główny dokumentu XML, który jest weryfikowany po uruchomieniu kodu. Jeśli kompilujesz bez Option Strictelementu , możesz osadzić wyrażenia typu Object , a ich typ jest weryfikowany w czasie wykonywania.

W lokalizacjach, w których zawartość jest opcjonalna, wyrażenia osadzone, które zawierają Nothing , są ignorowane. Oznacza to, że nie trzeba sprawdzać, czy zawartość elementu, wartości atrybutów i elementy tablicy nie Nothing są przed użyciem literału XML. Wymagane wartości, takie jak nazwy elementów i atrybutów, nie mogą być Nothing.

Aby uzyskać więcej informacji na temat używania wyrażenia osadzonego w określonym typie literału, zobacz Literał dokumentu XML, literał elementu XML.

Reguły określania zakresu

Kompilator konwertuje każdy literał XML na wywołanie konstruktora dla odpowiedniego typu literału. Zawartość literału i wyrażenia osadzone w literału XML są przekazywane jako argumenty do konstruktora. Oznacza to, że wszystkie elementy programowania Języka Visual Basic dostępne dla literału XML są również dostępne dla jego osadzonych wyrażeń.

W literału XML można uzyskać dostęp do prefiksów przestrzeni nazw XML zadeklarowanych za pomocą instrukcji Imports . Możesz zadeklarować nowy prefiks przestrzeni nazw XML lub w tle istniejący prefiks przestrzeni nazw XML w elemecie przy użyciu atrybutu xmlns . Nowa przestrzeń nazw jest dostępna dla węzłów podrzędnych tego elementu, ale nie do literałów XML w wyrażeniach osadzonych.

Uwaga

W przypadku deklarowania prefiksu przestrzeni nazw XML przy użyciu atrybutu xmlns przestrzeni nazw wartość atrybutu musi być ciągiem stałym. W tym względzie użycie atrybutu xmlns przypomina użycie instrukcji w Imports celu zadeklarowania przestrzeni nazw XML. Nie można użyć wyrażenia osadzonego do określenia wartości przestrzeni nazw XML.

Zobacz też