C# içinde ad alanları olan bir belge oluşturma (LINQ to XML)

Bu makalede, C# dilinde ad alanları olan belgelerin nasıl oluşturulacağı gösterilmektedir.

Örnek: Varsayılan ad alanını bildirme ve başlatma

Ad alanında bulunan bir öğe veya öznitelik oluşturmak için önce bir XNamespace nesne bildirir ve başlatırsınız. Daha sonra ad alanını dize olarak ifade edilen yerel adla birleştirmek için toplama işleci aşırı yüklemesini kullanırsınız.

Aşağıdaki örnek, bir ad alanına sahip bir belge oluşturur. Varsayılan olarak, LINQ to XML bu belgeyi varsayılan ad alanıyla serileştirir.

// Create an XML tree in a namespace.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);

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

<Root xmlns="http://www.adventure-works.com">
  <Child>child content</Child>
</Root>

Örnek: Ad alanı ve özniteliği olan bir belge oluşturma

Aşağıdaki örnek, bir ad alanına sahip bir belge oluşturur. Ayrıca ad alanını bir ad alanı ön eki ile bildiren bir öznitelik de oluşturur. Ön ek içeren bir ad alanı bildiren bir öznitelik oluşturmak için, özniteliğin adının ad alanı öneki olduğu ve bu adın ad alanında olduğu Xmlns bir öznitelik oluşturursunuz. Bu özniteliğin değeri, ad alanının URI'dir.

// Create an XML tree in a namespace, with a specified prefix
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);

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

<aw:Root xmlns:aw="http://www.adventure-works.com">
  <aw:Child>child content</aw:Child>
</aw:Root>

Örnek: Biri ön ekli olmak üzere iki ad alanına sahip bir belge oluşturma

Aşağıdaki örnekte, iki ad alanı içeren bir belgenin oluşturulması gösterilmektedir. Biri varsayılan ad alanı, diğeri ön ekli bir ad alanıdır.

Kök öğesine ad alanı öznitelikleri eklenerek, ad alanları varsayılan ad alanı olacak şekilde http://www.adventure-works.com serileştirilir ve www.fourthcoffee.com ön ekiyle fcserileştirilir. Varsayılan ad alanını bildiren bir öznitelik oluşturmak için, ad alanı olmadan adlı xmlnsbir öznitelik oluşturursunuz. özniteliğinin değeri varsayılan ad alanı URI'dir.

// The http://www.adventure-works.com namespace is forced to be the default namespace.
XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
    new XAttribute("xmlns", "http://www.adventure-works.com"),
    new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
    new XElement(fc + "Child",
        new XElement(aw + "DifferentChild", "other content")
    ),
    new XElement(aw + "Child2", "c2 content"),
    new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);

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

<Root xmlns="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
  <fc:Child>
    <DifferentChild>other content</DifferentChild>
  </fc:Child>
  <Child2>c2 content</Child2>
  <fc:Child3>c3 content</fc:Child3>
</Root>

Örnek: Her ikisi de ön ekli iki ad alanına sahip bir belge oluşturma

Aşağıdaki örnek, her ikisi de ad alanı ön eklerine sahip iki ad alanı içeren bir belge oluşturur.

XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", aw.NamespaceName),
    new XAttribute(XNamespace.Xmlns + "fc", fc.NamespaceName),
    new XElement(fc + "Child",
        new XElement(aw + "DifferentChild", "other content")
    ),
    new XElement(aw + "Child2", "c2 content"),
    new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);

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

<aw:Root xmlns:aw="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
  <fc:Child>
    <aw:DifferentChild>other content</aw:DifferentChild>
  </fc:Child>
  <aw:Child2>c2 content</aw:Child2>
  <fc:Child3>c3 content</fc:Child3>
</aw:Root>

Örnek: Genişletilmiş adları kullanarak ad alanı oluşturma

Aynı sonucu elde etmenin bir diğer yolu da nesne bildirmek ve oluşturmak XNamespace yerine genişletilmiş adlar kullanmaktır.

Bu yaklaşımın performans üzerindeki etkileri vardır. GENIŞLETILMIŞ ad içeren bir dizeyi LINQ to XML'ye her geçirdiğinizde, LINQ to XML adı ayrıştırmalı, atomize edilmiş ad alanını ve atomize edilmiş adı bulmalıdır. Bu işlem CPU süresini alır. Performans önemliyse, bir XNamespace nesneyi açıkça bildirmek ve kullanmak isteyebilirsiniz.

Performans önemli bir sorunsa daha fazla bilgi için bkz . XName Nesnelerinin Önceden Atomizasyonu.

// Create an XML tree in a namespace, with a specified prefix
XElement root = new XElement("{http://www.adventure-works.com}Root",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    new XElement("{http://www.adventure-works.com}Child", "child content")
);
Console.WriteLine(root);

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

<aw:Root xmlns:aw="http://www.adventure-works.com">
  <aw:Child>child content</aw:Child>
</aw:Root>

Ayrıca bkz.