Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zapytanie
Zapytanie, które piszesz podczas ładowania dokumentu za pomocą XDocument.Load, nieco się różni od tego, które stosujesz przy ładowaniu za pomocą XElement.Load.
Porównanie i XDocument.LoadXElement.Load
Podczas ładowania dokumentu XML do XElement za pomocą XElement.Load, XElement w korzeniu drzewa XML zawiera element główny załadowanego dokumentu. Jednak w przypadku załadowania tego samego dokumentu XML do XDocument elementu za pośrednictwem XDocument.Load, element główny drzewa jest węzłem XDocument, a elementem głównym załadowanego dokumentu jest jeden dozwolony węzeł podrzędny XElementXDocument. Osie LINQ to XML działają względem węzła głównego.
Przykład: ładowanie drzewa XML przy użyciu elementu XElement.Load, a następnie wykonywanie zapytania o elementy podrzędne
W tym pierwszym przykładzie ładuje drzewo XML przy użyciu polecenia Load. Następnie wykonuje zapytanie o elementy potomne korzenia drzewa.
// Create a simple document and write it to a file
File.WriteAllText("Test.xml", @"<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>");
Console.WriteLine("Querying tree loaded with XElement.Load");
Console.WriteLine("----");
XElement doc = XElement.Load("Test.xml");
IEnumerable<XElement> childList =
from el in doc.Elements()
select el;
foreach (XElement e in childList)
Console.WriteLine(e);
' Create a simple document and write it to a file
File.WriteAllText("Test.xml", "<Root>" + Environment.NewLine + _
" <Child1>1</Child1>" + Environment.NewLine + _
" <Child2>2</Child2>" + Environment.NewLine + _
" <Child3>3</Child3>" + Environment.NewLine + _
"</Root>")
Console.WriteLine("Querying tree loaded with XElement.Load")
Console.WriteLine("----")
Dim doc As XElement = XElement.Load("Test.xml")
Dim childList As IEnumerable(Of XElement) = _
From el In doc.Elements() _
Select el
For Each e As XElement In childList
Console.WriteLine(e)
Next
Ten przykład generuje następujące wyniki:
Querying tree loaded with XElement.Load
----
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
Przykład: ładowanie drzewa XML przy użyciu elementu XDocument.Load, a następnie wykonywanie zapytania o elementy podrzędne
W następnym przykładzie jest to samo, co powyżej, ale drzewo XML zostało załadowane do XDocument, a nie do XElement.
// Create a simple document and write it to a file
File.WriteAllText("Test.xml", @"<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>");
Console.WriteLine("Querying tree loaded with XDocument.Load");
Console.WriteLine("----");
XDocument doc = XDocument.Load("Test.xml");
IEnumerable<XElement> childList =
from el in doc.Elements()
select el;
foreach (XElement e in childList)
Console.WriteLine(e);
' Create a simple document and write it to a file
File.WriteAllText("Test.xml", "<Root>" + Environment.NewLine + _
" <Child1>1</Child1>" + Environment.NewLine + _
" <Child2>2</Child2>" + Environment.NewLine + _
" <Child3>3</Child3>" + Environment.NewLine + _
"</Root>")
Console.WriteLine("Querying tree loaded with XDocument.Load")
Console.WriteLine("----")
Dim doc As XDocument = XDocument.Load("Test.xml")
Dim childList As IEnumerable(Of XElement) = _
From el In doc.Elements() _
Select el
For Each e As XElement In childList
Console.WriteLine(e)
Next
Ten przykład generuje następujące wyniki:
Querying tree loaded with XDocument.Load
----
<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>
Zwróć uwagę, że to samo zapytanie zwróciło jeden Root węzeł zamiast trzech węzłów podrzędnych.
Jednym z podejść do radzenia sobie z tym jest użycie Root właściwości przed uzyskaniem dostępu do metod osi w następujący sposób:
// Create a simple document and write it to a file
File.WriteAllText("Test.xml", @"<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>");
Console.WriteLine("Querying tree loaded with XDocument.Load");
Console.WriteLine("----");
XDocument doc = XDocument.Load("Test.xml");
IEnumerable<XElement> childList =
from el in doc.Root.Elements()
select el;
foreach (XElement e in childList)
Console.WriteLine(e);
' Create a simple document and write it to a file
File.WriteAllText("Test.xml", "<Root>" + Environment.NewLine + _
" <Child1>1</Child1>" + Environment.NewLine + _
" <Child2>2</Child2>" + Environment.NewLine + _
" <Child3>3</Child3>" + Environment.NewLine + _
"</Root>")
Console.WriteLine("Querying tree loaded with XDocument.Load")
Console.WriteLine("----")
Dim doc As XDocument = XDocument.Load("Test.xml")
Dim childList As IEnumerable(Of XElement) = _
From el In doc.Root.Elements() _
Select el
For Each e As XElement In childList
Console.WriteLine(e)
Next
To zapytanie działa teraz w taki sam sposób, jak zapytanie na drzewie zakorzenionym w XElement.
Ten przykład generuje następujące wyniki:
Querying tree loaded with XDocument.Load
----
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>