Literały XML w Visual Basic (LINQ to XML)
Ten artykuł zawiera informacje na temat tworzenia drzew XML w języku Visual Basic przy użyciu literałów XML i osadzonych wyrażeń.
Przykład: tworzenie drzewa XML przy użyciu literałów XML
W poniższym przykładzie pokazano, jak utworzyć obiekt XElement, w tym przypadku contacts
z literałami XML:
Dim contacts As XElement = _
<Contacts>
<Contact>
<Name>Patrick Hines</Name>
<Phone>206-555-0144</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>Mercer Island</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
</Contact>
</Contacts>
Przykład: tworzenie elementu XElement z prostą zawartością przy użyciu literałów XML
Możesz utworzyć obiekt zawierający prostą XElement zawartość w następujący sposób:
Dim n as XElement = <Customer>Adventure Works</Customer>
Console.WriteLine(n)
Ten przykład generuje następujące wyniki:
<Customer>Adventure Works</Customer>
Przykład: użyj literału XML, aby utworzyć pusty element
Możesz utworzyć pustą XElementwartość w następujący sposób:
Dim n As XElement = <Customer/>
Console.WriteLine(n)
Ten przykład generuje następujące wyniki:
<Customer />
Tworzenie zawartości za pomocą wyrażeń osadzonych
Ważną cechą literałów XML jest to, że umożliwiają one wyrażenia osadzone. Wyrażenia osadzone umożliwiają ocenę wyrażenia i wstawianie wyników wyrażenia do drzewa XML. Jeśli wyrażenie zwróci wartość typu XElement, element zostanie wstawiony do drzewa. Jeśli wyrażenie zwróci wartość typu XAttribute, atrybut zostanie wstawiony do drzewa. Elementy i atrybuty można wstawić do drzewa tylko wtedy, gdy są prawidłowe.
Należy pamiętać, że tylko jedno wyrażenie może przejść do wyrażenia osadzonego. Nie można osadzić wielu instrukcji. Jeśli wyrażenie wykracza poza pojedynczy wiersz, musisz użyć znaku kontynuacji wiersza.
Jeśli używasz wyrażenia osadzonego do dodawania istniejących węzłów (w tym elementów) i atrybutów do nowego drzewa XML, a jeśli istniejące węzły są już nadrzędne, węzły zostaną sklonowane. Nowo sklonowane węzły są dołączone do nowego drzewa XML. Jeśli istniejące węzły nie są nadrzędne, węzły są po prostu dołączone do nowego drzewa XML. Ostatni przykład w tym artykule pokazuje to.
Przykład: używanie wyrażenia osadzonego do wstawiania elementu
W poniższym przykładzie użyto wyrażenia osadzonego do wstawienia elementu do drzewa:
xmlTree1 As XElement = _
<Root>
<Child>Contents</Child>
</Root>
Dim xmlTree2 As XElement = _
<Root>
<%= xmlTree1.<Child> %>
</Root>
Console.WriteLine(xmlTree2)
Ten przykład generuje następujące wyniki:
<Root>
<Child>Contents</Child>
</Root>
Przykład: używanie wyrażenia osadzonego dla zawartości
Możesz użyć wyrażenia osadzonego, aby podać zawartość elementu:
Dim str As String
str = "Some content"
Dim root As XElement = <Root><%= str %></Root>
Console.WriteLine(root)
Ten przykład generuje następujące wyniki:
<Root>Some content</Root>
Przykład: używanie zapytania LINQ w wyrażeniu osadzonym
Możesz użyć wyników zapytania LINQ, aby podać zawartość elementu:
Dim arr As Integer() = {1, 2, 3}
Dim n As XElement = _
<Root>
<%= From i In arr Select <Child><%= i %></Child> %>
</Root>
Console.WriteLine(n)
Ten przykład generuje następujące wyniki:
<Root>
<Child>1</Child>
<Child>2</Child>
<Child>3</Child>
</Root>
Przykład: użyj wyrażenia osadzonego, aby podać nazwy węzłów
Możesz również użyć wyrażenia osadzonego, aby obliczyć nazwy atrybutów, wartości atrybutów, nazwy elementów i wartości elementów:
Dim eleName As String = "ele"
Dim attName As String = "att"
Dim attValue As String = "aValue"
Dim eleValue As String = "eValue"
Dim n As XElement = _
<Root <%= attName %>=<%= attValue %>>
<<%= eleName %>>
<%= eleValue %>
</>
</Root>
Console.WriteLine(n)
Ten przykład generuje następujące wyniki:
<Root att="aValue">
<ele>eValue</ele>
</Root>
Przykład: używanie wyrażenia osadzonego do klonowania i dołączania węzłów
Jak wspomniano wcześniej, jeśli używasz wyrażenia osadzonego do dodawania istniejących węzłów (w tym elementów) i atrybutów do nowego drzewa XML, a jeśli dodawane węzły są już nadrzędne, węzły są klonowane, a klony są dołączone do nowego drzewa XML. Jeśli istniejące węzły nie są nadrzędne, są po prostu dołączone do nowego drzewa XML.
Poniższy kod demonstruje zachowanie podczas dodawania elementu nadrzędnego do drzewa i dodawania elementu bez elementu nadrzędnego do drzewa.
' Create a tree with a child element.
Dim xmlTree1 As XElement = _
<Root>
<Child1>1</Child1>
</Root>
' Create an element that's not parented.
Dim child2 As XElement = <Child2>2</Child2>
' Create a tree and add Child1 and Child2 to it.
Dim xmlTree2 As XElement = _
<Root>
<%= xmlTree1.<Child1>(0) %>
<%= child2 %>
</Root>
' Compare Child1 identity.
Console.WriteLine("Child1 was {0}", _
IIf(xmlTree1.Element("Child1") Is xmlTree2.Element("Child1"), _
"attached", "cloned"))
' Compare Child2 identity.
Console.WriteLine("Child2 was {0}", _
IIf(child2 Is xmlTree2.Element("Child2"), _
"attached", "cloned"))
Ten przykład generuje następujące wyniki:
Child1 was cloned
Child2 was attached