`XDocument` ile sorgulama vs. `XElement` ile sorgulama (LINQ to XML)

aracılığıyla bir belge yüklerken yazdığınız sorgu, aracılığıyla XDocument.LoadXElement.Loadyüklediğinizde yazdığınız sorgudan biraz farklıdır.

Karşılaştırması XDocument.Load ve XElement.Load

Bir XML belgesini XElement aracılığıyla XElement.Load yüklediğinizde, XML ağacının kökündeki XElement, yüklenen belgenin kök öğesini içerir. Ancak, aynı XML belgesini bir XDocument içine XDocument.Load aracılığıyla yüklediğinizde, ağacın kökü bir XDocument düğümdür ve yüklenen belgenin kök öğesi, XElement öğesinin izin verilen tek XDocument alt düğümüdür. LINQ to XML eksenleri kök düğüme göre çalışır.

Örnek: kullanarak XElement.Loadbir XML ağacı yükleyin, ardından alt öğeler için sorgu yapın

Bu ilk örnek Load kullanarak bir XML ağacı yükler. Ardından, ağacın kök kısmındaki alt öğeleri sorgular.

// 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

Bu örnek aşağıdaki çıkışı oluşturur:

Querying tree loaded with XElement.Load
----
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>

Örnek: kullanarak XDocument.Loadbir XML ağacı yükleyin, ardından alt öğeler için sorgu yapın

Sonraki örnek yukarıdakinin yaptığı işlemi yapar, ancak XML ağacı bir XDocument içine yüklenmiş, bir XElement yerine.

// 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

Bu örnek aşağıdaki çıkışı oluşturur:

Querying tree loaded with XDocument.Load
----
<Root>
  <Child1>1</Child1>
  <Child2>2</Child2>
  <Child3>3</Child3>
</Root>

Aynı sorgunun üç alt düğüm yerine bir Root düğümü döndürdüğünü fark edin.

Bununla başa çıkmanın yollarından biri, eksen yöntemlerine erişmeden önce aşağıdaki gibi Root özelliğini kullanmaktır.

// 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

Bu sorgu artık XElement kökünde bulunan ağaçtaki sorgu ile aynı şekilde gerçekleştirilir.

Bu örnek aşağıdaki çıkışı oluşturur:

Querying tree loaded with XDocument.Load
----
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>