Bagikan melalui


Kelas System.Xml.Linq.XName

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Nama XML menyertakan namespace layanan dan nama lokal. Nama yang sepenuhnya memenuhi syarat adalah kombinasi namespace layanan dan nama lokal.

Membuat objek XName

XName tidak berisi konstruktor publik apa pun. Sebaliknya, kelas ini menyediakan konversi implisit dari String yang memungkinkan Anda membuat XName. Tempat paling umum Anda menggunakan konversi ini adalah saat membuat elemen atau atribut: Argumen pertama untuk XElement konstruktor adalah XName. Dengan meneruskan string, Anda memanfaatkan konversi implisit. Kode berikut membuat elemen dengan nama tanpa namespace:

XElement root = new XElement("ElementName", "content");
Console.WriteLine(root);

Di Visual Basic, lebih tepat untuk menggunakan literal XML:

Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)

Contoh ini menghasilkan output berikut:

<ElementName>content</ElementName>

Menetapkan string ke XName menggunakan konversi implisit dari String.

Contoh Visual Basic membuat XElement menggunakan literal XML. Meskipun literal XML digunakan, objek XName dibuat untuk XElement.

Selain itu, Anda dapat memanggil Get metode untuk XName objek. Namun, cara yang disarankan adalah menggunakan konversi implisit dari string.

Membuat XName di namespace

Seperti halnya XML, XName dapat berada di namespace layanan, atau tidak dapat berada di namespace.

Untuk C#, pendekatan yang XName direkomendasikan untuk membuat di namespace adalah mendeklarasikan XNamespace objek, lalu menggunakan penimpaan operator penambahan.

Untuk Visual Basic, pendekatan yang direkomendasikan adalah menggunakan literal XML dan deklarasi namespace global untuk membuat XML yang ada di namespace layanan.

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "ElementName", "content");
Console.WriteLine(root);
Imports <xmlns="http://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim root As XElement = <ElementName>content</ElementName>
        Console.WriteLine(root)
    End Sub
End Module

Contoh ini menghasilkan output berikut:

<ElementName xmlns="http://www.adventure-works.com">content</ElementName>

Membuat XName tanpa namespace

Properti NamespaceXName objek dijamin tidak null. XName Jika tidak ada namespace layanan, maka Namespace properti akan diatur ke None. Kode berikut menunjukkan hal yang sama:

XElement root = new XElement("ElementName", "content");
if (root.Name.Namespace == XNamespace.None)
    Console.WriteLine("The element is in no namespace.");
else
    Console.WriteLine("The element is in a namespace.");
Dim root As XElement = <ElementName>content</ElementName>
If (root.Name.Namespace Is XNamespace.None) Then
    Console.WriteLine("The element is in no namespace.")
Else
    Console.WriteLine("The element is in a namespace.")
End If

Contoh ini menghasilkan output berikut:

The element is in no namespace.

Menggunakan nama yang diperluas

Anda juga dapat membuat dari nama XML yang XName diperluas dalam formulir {namespace}localname:

XElement root = new XElement("{http://www.adventure-works.com}ElementName", "content");
Console.WriteLine(root);
Dim root As XElement = New XElement("{http://www.adventure-works.com}ElementName", "content")
Console.WriteLine(root)

Contoh ini menghasilkan output berikut:

<ElementName xmlns="http://www.adventure-works.com">content</ElementName>

Ketahuilah bahwa membuat melalui nama yang XName diperluas kurang efisien daripada membuat XNamespace objek dan menggunakan penimpaan operator penambahan. Ini juga kurang efisien daripada mengimpor namespace global dan menggunakan literal XML di Visual Basic.

Jika Anda membuat XName menggunakan nama yang diperluas, LINQ ke XML harus menemukan instans namespace yang diatomisasi. Pekerjaan ini harus diulang untuk setiap penggunaan nama yang diperluas. Waktu tambahan ini kemungkinan dapat diabaikan saat menulis kueri LINQ; namun, mungkin signifikan saat membuat pohon XML besar.

Objek XName diatomisasi

XName objek dijamin akan diatomisasi; artinya, jika dua XName objek memiliki namespace yang sama persis dan nama lokal yang sama persis, mereka akan berbagi instans yang sama. Operator kesetaraan dan perbandingan juga disediakan secara eksplisit untuk tujuan ini.

Di antara manfaat lainnya, fitur ini memungkinkan eksekusi kueri yang lebih cepat. Saat memfilter nama elemen atau atribut, perbandingan yang dinyatakan dalam predikat menggunakan perbandingan identitas, bukan perbandingan nilai. Jauh lebih cepat untuk menentukan bahwa dua referensi benar-benar merujuk ke objek yang sama daripada membandingkan dua string.