Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Comparer une requête
La requête que vous écrivez lorsque vous chargez un document XDocument.Load diffère légèrement de celle que vous écrivez lorsque vous chargez via XElement.Load.
Comparaison de XDocument.Load et XElement.Load
Lorsque vous chargez un document XML dans un XElement via XElement.Load, la XElement racine de l’arborescence XML contient l’élément racine du document chargé. Toutefois, lorsque vous chargez le même document XML dans un XDocument via XDocument.Load, la racine de l'arborescence est un nœud XDocument, et l'élément racine du document chargé est le seul nœud enfant autorisé XElement du XDocument. Les axes LINQ to XML fonctionnent par rapport au nœud racine.
Exemple : Charger une arborescence XML à l’aide de XElement.Load, puis interroger les éléments enfants.
Ce premier exemple charge une arborescence XML à l’aide de Load. Il interroge ensuite les éléments enfants de la racine de l'arborescence.
// 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
Cet exemple génère la sortie suivante :
Querying tree loaded with XElement.Load
----
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
Exemple : Charger une arborescence XML à l’aide de XDocument.Load, puis interroger les éléments enfants.
L’exemple suivant fait la même chose que celui ci-dessus, mais l’arborescence XML a été chargée dans un XDocument, plutôt qu’un 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
Cet exemple génère la sortie suivante :
Querying tree loaded with XDocument.Load
----
<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>
Notez que la même requête a retourné un seul nœud Root au lieu des trois nœuds enfants.
L’une des approches à suivre consiste à utiliser la Root propriété avant d’accéder aux méthodes d’axes, comme suit :
// 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
Cette requête s'exécute désormais de la même manière que la requête sur l'arborescence enracinée dans XElement.
Cet exemple génère la sortie suivante :
Querying tree loaded with XDocument.Load
----
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>