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 Strict
funkcję , 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 Strict
elementu , 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.