Bagikan melalui


Cara membuat dokumen dengan namespace di C# (LINQ ke XML)

Artikel ini menunjukkan cara membuat dokumen di C# yang memiliki namespace.

Contoh: Mendeklarasikan dan menginisialisasi namespace default

Untuk membuat elemen atau atribut yang ada di namespace, Pertama-tama Anda mendeklarasikan dan menginisialisasi objek XNamespace. Anda kemudian menggunakan kelebihan beban operator tambahan untuk menggabungkan namespace layanan dengan nama lokal, yang dinyatakan sebagai string.

Contoh berikut membuat dokumen dengan satu namespace. Secara default, LINQ ke XML menserialisasikan dokumen ini dengan namespace default.

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

Contoh ini menghasilkan output berikut:

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

Contoh: Membuat dokumen yang memiliki namespace dan atribut

Contoh berikut membuat dokumen dengan satu namespace. Ini juga membuat atribut yang mendeklarasikan namespace dengan awalan namespace. Untuk membuat atribut yang mendeklarasikan namespace dengan awalan, Anda membuat atribut di mana nama atribut adalah awalan namespace, dan nama ini ada di namespace Xmlns. Nilai atribut ini adalah URI dari namespace.

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

Contoh ini menghasilkan output berikut:

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

Contoh: Buatlah dokumen yang memiliki dua namespace, satu dengan awalan

Contoh berikut menunjukkan pembuatan dokumen yang berisi dua namespace. Salah satunya adalah namespace default, yang lain adalah namespace dengan awalan.

Dengan menyertakan atribut namespace dalam elemen akar, namespace dijadikan serial sehingga http://www.adventure-works.com adalah namespace default, dan www.fourthcoffee.com dijadikan serial dengan awalan fc. Untuk membuat atribut yang mendeklarasikan namespace default, Anda membuat atribut dengan nama xmlns, tanpa namespace. Nilai atribut adalah URI namespace default.

Jika deklarasi namespace default berada dalam cakupan, itu diterapkan dengan menambahkan awalan pada nama lokal objek turunan XElement dengan objek XNamespace yang sesuai. Di sisi lain, deklarasi namespace default tidak berlaku langsung ke nama atribut. Jadi, objek XAttribute di namespace default didefinisikan oleh tidak awalan nama lokal mereka dengan objek XNamespace yang sesuai.

// 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 XAttribute("DefaultNs", "default namespace"),
        new XAttribute(fc + "PrefixedNs", "prefixed namespace")
    ),
    new XElement(fc + "Child3", "c3 content",
        new XAttribute("DefaultNs", "default namespace"),
        new XAttribute(fc + "PrefixedNs", "prefixed namespace")
    )
);
Console.WriteLine(root);

Contoh ini menghasilkan output berikut:

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

</Root>

Contoh: Buat dokumen yang memiliki dua namespace, keduanya dengan awalan

Contoh berikut membuat dokumen yang berisi dua namespace, masing-masing dengan prefix namespace.

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

Contoh ini menghasilkan output berikut:

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

Contoh: Membuat namespace menggunakan nama yang diperluas

Cara lain untuk mencapai hasil yang sama adalah dengan menggunakan nama yang diperluas alih-alih mendeklarasikan dan membuat objek XNamespace.

Pendekatan ini memiliki implikasi performa. Setiap kali Anda meneruskan string yang berisi nama yang diperluas ke LINQ ke XML, LINQ ke XML harus mengurai nama, menemukan namespace yang diatomisasi, dan menemukan nama yang diatomisasi. Proses ini membutuhkan waktu CPU. Jika performa penting, Anda mungkin ingin mendeklarasikan dan menggunakan objek XNamespace secara eksplisit.

Jika performa adalah masalah penting, lihat Pra-Atomisasi Objek XName untuk informasi selengkapnya.

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

Contoh ini menghasilkan output berikut:

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

Lihat juga