C# (LINQ to XML) XML ağaçları oluşturmaCreating XML trees in C# (LINQ to XML)

Bu bölümde, C# dilinde XML ağaçları oluşturma hakkında bilgi sağlar.This section provides information about creating XML trees in C#.

LINQ sorguları sonuçları içerik için kullanma hakkında bilgi için bir XElement, bkz: işlevsel oluşturma (LINQ to XML) (C#).For information about using the results of LINQ queries as the content for an XElement, see Functional Construction (LINQ to XML) (C#).

Öğeleri oluşturmaConstructing elements

İmzalarını XElement ve XAttribute oluşturucular içeriği öğe veya öznitelik oluşturucusu için bağımsız değişken olarak geçirmenize olanak tanır.The signatures of the XElement and XAttribute constructors let you pass the contents of the element or attribute as arguments to the constructor. Değişken sayıda bağımsız değişken bir oluşturucular yararlandığı için herhangi bir sayıda alt öğeleri geçirebilirsiniz.Because one of the constructors takes a variable number of arguments, you can pass any number of child elements. Elbette, bu alt öğelerin her biri kendi alt öğelerini içerebilir.Of course, each of those child elements can contain their own child elements. Herhangi bir öğe için herhangi bir sayıda öznitelikler ekleyebilirsiniz.For any element, you can add any number of attributes.

Eklerken XNode (dahil olmak üzere XElement) veya XAttribute nesneler, yeni içerik üstü yoksa, nesneleri yalnızca bağlı XML ağacına.When adding XNode (including XElement) or XAttribute objects, if the new content has no parent, the objects are simply attached to the XML tree. Yeni içerik zaten üst öğe ve başka bir XML ağacının bir parçası ise, yeni içerik kopyalanmış olan ve yeni kopyalanan içeriği XML ağacına eklenir.If the new content already is parented, and is part of another XML tree, the new content is cloned, and the newly cloned content is attached to the XML tree. Bu konu Son örnekte bu gösterir.The last example in this topic demonstrates this.

Oluşturmak için bir contacts XElement, aşağıdaki kodu kullanabilirsiniz:To create a contactsXElement, you could use the following code:

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 bir şekilde oluşturmak için kod girintili varsa XElement nesneleri temel alınan XML yapısını çok benzeyen.If indented properly, the code to construct XElement objects closely resembles the structure of the underlying XML.

XElement oluşturucularXElement constructors

XElement Sınıfı için işlevsel oluşturma şu oluşturuculardan kullanır.The XElement class uses the following constructors for functional construction. Diğer bazı oluşturucular için olduğunu unutmayın XElement, ancak bunlar listelenmediğinden burada işlevsel oluşturma için kullanılmaz.Note that there are some other constructors for XElement, but because they are not used for functional construction they are not listed here.

OluşturucuConstructor AçıklamaDescription
XElement(XName name, object content) Oluşturur bir XElement.Creates an XElement. name Parametresi belirtir; öğe adı content öğenin içeriğini belirtir.The name parameter specifies the name of the element; content specifies the content of the element.
XElement(XName name) Oluşturur bir XElement ile kendi XName belirtilen adla başlatıldı.Creates an XElement with its XName initialized to the specified name.
XElement(XName name, params object[] content) Oluşturur bir XElement ile kendi XName belirtilen adla başlatıldı.Creates an XElement with its XName initialized to the specified name. Parametre listesi içeriğinden özniteliklerini ve/veya alt öğeleri oluşturulur.The attributes and/or child elements are created from the contents of the parameter list.

content Parametre son derece esnektir.The content parameter is extremely flexible. Tür geçerli bir alt nesneyi destekleyen bir XElement.It supports any type of object that is a valid child of an XElement. Bu parametreye geçirilen nesneleri farklı türleri için aşağıdaki kurallar geçerlidir:The following rules apply to different types of objects passed in this parameter:

  • Bir dizeyi metin içeriği olarak eklenir.A string is added as text content.

  • Bir XElement bir alt öğesi eklenir.An XElement is added as a child element.

  • Bir XAttribute öznitelik olarak eklenir.An XAttribute is added as an attribute.

  • Bir XProcessingInstruction, XComment, veya XText alt içerik eklenir.An XProcessingInstruction, XComment, or XText is added as child content.

  • Bir IEnumerable numaralandırılmış alan şeklinde ve bu kuralların sonuçları için özyinelemeli olarak uygulanır.An IEnumerable is enumerated, and these rules are applied recursively to the results.

  • Başka herhangi bir tür için kendi ToString yöntemi çağrılır ve sonuç metin içeriği eklenir.For any other type, its ToString method is called and the result is added as text content.

Bir XElement ile içerik oluşturmaCreating an XElement with content

Oluşturabileceğiniz bir XElement içeren tek bir yöntem çağrısı ile basit içerik.You can create an XElement that contains simple content with a single method call. Bunu yapmak için ikinci parametre olarak, içeriği aşağıdaki gibi belirtin:To do this, specify the content as the second parameter, as follows:

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

Bu örnek aşağıdaki çıktıyı üretir:This example produces the following output:

<Customer>Adventure Works</Customer>  

Nesnesinin her türlü içeriği olarak geçirebilirsiniz.You can pass any type of object as the content. Örneğin, aşağıdaki kod bir değişken içeren bir öğe oluşturur nokta içerik olarak sayısı:For example, the following code creates an element that contains a floating point number as content:

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

Bu örnek aşağıdaki çıktıyı üretir:This example produces the following output:

<Cost>324.5</Cost>  

Kayan nokta numarası Kutulu ve oluşturucuya geçirilen.The floating point number is boxed and passed in to the constructor. Paketlenmiş sayıyı bir dizeye dönüştürülür ve öğenin içeriğini kullanılan.The boxed number is converted to a string and used as the content of the element.

Bir XElement olan bir alt öğesi oluşturmaCreating an XElement with a child element

Örneği geçirirseniz XElement sınıfı Oluşturucu içerik bağımsız değişkeni için olan bir alt öğesi bir öğe oluşturur:If you pass an instance of the XElement class for the content argument, the constructor creates an element with a child element:

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

Bu örnek aşağıdaki çıktıyı üretir:This example produces the following output:

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

Bir XElement ile birden çok alt öğeleri oluşturmaCreating an XElement with multiple child elements

Bir süre içinde geçirdiğiniz XElement içerik için nesneleri.You can pass in a number of XElement objects for the content. Her biri XElement nesneleri bir alt öğesi eklenmiştir.Each of the XElement objects is included as a child element.

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 çıktıyı üretir:This example produces the following output:

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

Yukarıdaki örnekte genişleterek tüm XML ağacının, şu şekilde oluşturabilirsiniz:By extending the above example, you can create an entire XML tree, as follows:

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 çıktıyı üretir:This example produces the following output:

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

Bir XElement bir XAttribute ile oluşturmaCreating an XElement with an XAttribute

Örneği geçirirseniz XAttribute sınıfı Oluşturucu içerik bağımsız değişkeni bir öznitelik bir öğe oluşturur:If you pass an instance of the XAttribute class for the content argument, the constructor creates an element with an attribute:

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

Bu örnek aşağıdaki çıktıyı üretir:This example produces the following output:

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

Boş bir öğe oluşturmaCreating an empty element

Boş bir oluşturmak için XElement, oluşturucuya herhangi bir içerik geçirmeyin.To create an empty XElement, you do not pass any content to the constructor. Aşağıdaki örnek, boş bir öğe oluşturur:The following example creates an empty element:

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

Bu örnek aşağıdaki çıktıyı üretir:This example produces the following output:

<Customer />  

Ekleme ve kopyalamaAttaching vs. cloning

Eklerken daha önce de belirtildiği XNode (dahil olmak üzere XElement) veya XAttribute nesneler, yeni içerik üstü yoksa, nesneleri yalnızca bağlı XML ağacına.As mentioned previously, when adding XNode (including XElement) or XAttribute objects, if the new content has no parent, the objects are simply attached to the XML tree. Yeni içerik zaten üst öğe ve başka bir XML ağacının bir parçası ise, yeni içerik kopyalanmış olan ve yeni kopyalanan içeriği XML ağacına eklenir.If the new content already is parented and is part of another XML tree, the new content is cloned, and the newly cloned content is attached to the XML tree.

Aşağıdaki örnek, bir ağaca üst öğeye sahip bir öğe eklediğinizde ve bir ağaca hiçbir üst öğesi ile bir öğe eklediğinizde davranış gösterir.The following example demonstrates the behavior when you add a parented element to a tree, and when you add an element with no parent to a tree.

// Create a tree with a child element.  
XElement xmlTree1 = new XElement("Root",  
    new XElement("Child1", 1)  
);  
  
// Create an element that is 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");  

// The example displays the following output:  
//    Child1 was cloned  
//    Child2 was attached  

Ayrıca bkz.See also