C# dilinde XML ağaçları oluşturma (LINQ to XML)

Bu makalede, C# dilinde XML ağaçları oluşturma hakkında bilgi sağlanır.

LINQ sorgularının sonuçlarını bir XElementiçin içerik olarak kullanma hakkında bilgi için bkz . İşlevsel yapı.

Öğe oluşturma

ve XAttribute oluşturucularının imzaları, öğesinin XElement veya özniteliğin içeriğini oluşturucuya bağımsız değişken olarak geçirmenize olanak sağlar. Oluşturuculardan biri değişken sayıda bağımsız değişken aldığından, istediğiniz sayıda alt öğe geçirebilirsiniz. Elbette, bu alt öğelerin her biri kendi alt öğelerini içerebilir. Herhangi bir öğe için istediğiniz sayıda öznitelik ekleyebilirsiniz.

XNode Eklerken (dahilXElement) veya XAttribute nesneler, yeni içerikte üst öğe yoksa, nesneler yalnızca XML ağacına eklenir. Yeni içerik zaten üst öğeyse ve başka bir XML ağacının parçasıysa, yeni içerik kopyalanır ve yeni kopyalanan içerik XML ağacına eklenir. Bu makaledeki son örnekte bunu gösterilmektedir.

oluşturmak contacts XElementiçin aşağıdaki kodu kullanabilirsiniz:

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144"),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

Düzgün girintiliyse, nesneleri oluşturmak XElement için kullanılan kod, temel alınan XML'nin yapısına benzer.

XElement oluşturucuları

sınıfı, XElement işlevsel yapı için aşağıdaki oluşturucuları kullanır. için XElementbaşka oluşturucular da olduğunu, ancak işlevsel yapı için kullanılmadıkları için burada listelenmediklerini unutmayın.

Oluşturucu Açıklama
XElement(XName name, object content) bir XElementoluşturur. name parametresi öğenin adını belirtir; content öğesinin içeriğini belirtir.
XElement(XName name) Belirtilen adla XName başlatılan bir XElement oluşturur.
XElement(XName name, params object[] content) Belirtilen adla XName başlatılan bir XElement oluşturur. Öznitelikler ve/veya alt öğeler parametre listesinin içeriğinden oluşturulur.

content Parametresi son derece esnektir. Geçerli bir alt XElementöğesi olan nesne türlerini destekler. Aşağıdaki kurallar, bu parametrede geçirilen farklı nesne türleri için geçerlidir:

  • Metin içeriği olarak bir dize eklenir.
  • alt XElement öğe olarak eklenir.
  • özniteliği XAttribute olarak eklenir.
  • Bir XProcessingInstruction, XCommentveya XText alt içerik olarak eklenir.
  • bir IEnumerable numaralandırılır ve bu kurallar sonuçlara özyinelemeli olarak uygulanır.
  • Başka herhangi bir tür ToString için yöntemi çağrılır ve sonuç metin içeriği olarak eklenir.

Örnek: İçerikle XElement oluşturma

Tek bir XElement yöntem çağrısıyla basit içerik içeren bir oluşturabilirsiniz. Bunu yapmak için, içeriği aşağıdaki gibi ikinci parametre olarak belirtin:

XElement n = new XElement("Customer", "Adventure Works");
Console.WriteLine(n);

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

<Customer>Adventure Works</Customer>

İçerik olarak herhangi bir nesne türünü geçirebilirsiniz. Örneğin, aşağıdaki kod içerik olarak kayan nokta numarası içeren bir öğe oluşturur:

XElement n = new XElement("Cost", 324.50);
Console.WriteLine(n);

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

<Cost>324.5</Cost>

Kayan nokta numarası kutulanır ve oluşturucuya geçirilir. Kutulanmış sayı bir dizeye dönüştürülür ve öğesinin içeriği olarak kullanılır.

Örnek: Alt öğeyle XElement oluşturma

İçerik bağımsız değişkeni için sınıfının bir örneğini XElement geçirirseniz, oluşturucu bir alt öğe ile bir öğe oluşturur:

XElement shippingUnit = new XElement("ShippingUnit",
    new XElement("Cost", 324.50)
);
Console.WriteLine(shippingUnit);

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

<ShippingUnit>
  <Cost>324.5</Cost>
</ShippingUnit>

Örnek: Birden çok alt öğeyle XElement oluşturma

İçerik için bir dizi XElement nesne geçirebilirsiniz. Nesnelerin her biri XElement bir alt öğe olarak eklenir.

XElement address = new XElement("Address",
    new XElement("Street1", "123 Main St"),
    new XElement("City", "Mercer Island"),
    new XElement("State", "WA"),
    new XElement("Postal", "68042")
);
Console.WriteLine(address);

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

<Address>
  <Street1>123 Main St</Street1>
  <City>Mercer Island</City>
  <State>WA</State>
  <Postal>68042</Postal>
</Address>

Önceki örneği genişleterek, aşağıdaki gibi bir XML ağacının tamamını oluşturabilirsiniz:

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144"),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );
Console.WriteLine(contacts);

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

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

Örnek: XAttribute ile XElement Oluşturma

content bağımsız değişkeni için sınıfının bir örneğini XAttribute geçirirseniz, oluşturucu özniteliğine sahip bir öğe oluşturur:

XElement phone = new XElement("Phone",
    new XAttribute("Type", "Home"),
    "555-555-5555");
Console.WriteLine(phone);

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

<Phone Type="Home">555-555-5555</Phone>

Örnek: Boş öğe oluşturma

Boş XElementbir oluşturmak için oluşturucuya herhangi bir içerik geçirmeyin. Aşağıdaki örnek boş bir öğe oluşturur:

XElement n = new XElement("Customer");
Console.WriteLine(n);

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

<Customer />

Örnek: Ekleme ve kopyalama karşılaştırması

Daha önce belirtildiği gibi, yeni içerikte üst öğe yoksa, nesneler (dahilXElement) veya XAttribute nesneler eklenirken XNode yalnızca XML ağacına eklenir. Yeni içerik zaten üst öğeyse ve başka bir XML ağacının parçasıysa, yeni içerik kopyalanır ve yeni kopyalanan içerik XML ağacına eklenir.

Aşağıdaki örnek, bir ağaca üst öğe eklediğinizde ve bir ağaca üst öğe içermeyen bir öğe eklediğinizde davranışı gösterir:

// Create a tree with a child element.
XElement xmlTree1 = new XElement("Root",
    new XElement("Child1", 1)
);

// Create an element that's not parented.
XElement child2 = new XElement("Child2", 2);

// Create a tree and add Child1 and Child2 to it.
XElement xmlTree2 = new XElement("Root",
    xmlTree1.Element("Child1"),
    child2
);

// Compare Child1 identity.
Console.WriteLine("Child1 was {0}",
    xmlTree1.Element("Child1") == xmlTree2.Element("Child1") ?
    "attached" : "cloned");

// Compare Child2 identity.
Console.WriteLine("Child2 was {0}",
    child2 == xmlTree2.Element("Child2") ?
    "attached" : "cloned");

// This example produces the following output:
//    Child1 was cloned
//    Child2 was attached

Ayrıca bkz.