Mengapa awalan namespace ditambahkan ke atribut XML saya?

Dec 14 2020

Saya punya biola di sini :

using System;
using System.Xml;
using System.IO;
using System.Text;
                    
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Starting");
        MemoryStream stream = new MemoryStream();
        var utf = new UTF8Encoding(false);
        XmlTextWriter writer = new XmlTextWriter(stream, utf);
        writer.Formatting = Formatting.Indented;
        writer.WriteStartDocument();
        
        writer.WriteProcessingInstruction("process", "5");
        writer.WriteComment("commenting");
        
        writer.WriteStartElement("dog");
        writer.WriteAttributeString("attribute", "www.windward.net", "5");
        
        writer.WriteStartElement("cat");
        
        writer.WriteEndElement();
        writer.WriteEndElement();
        writer.WriteEndDocument();
        writer.Flush();
        
        string result = utf.GetString(stream.ToArray(), 0, (int) stream.Length);
        Console.WriteLine("XML: " + result);
    }
}

Saya menambahkan atribut tanpa ruang nama awalan. Ini menciptakan awalan dari d1p1.

Mengapa?

Jawaban

1 kjhughes Dec 13 2020 at 23:52

Jawaban tingkat kode

Karena

    writer.WriteAttributeString("attribute", "www.windward.net", "5");

tempat attributeke dalam www.windward.net, dan awalan namespace digunakan untuk membuat asosiasi.

Jika Anda tidak ingin attributeberada di namespace, hapus "www.windward.net"argumen namespace:

    writer.WriteAttributeString("attribute", "5");

Jawaban tingkat XML

Pembaruan untuk mengatasi komentar OP:

Yang saya inginkan adalah atribut memiliki namespace www.windward.net, tetapi tanpa awalan. Bagaimana saya bisa melakukan itu?

Itu berarti menginginkan namespace default untuk diterapkan ke atribut, yang bertentangan dengan rekomendasi XML Namespace :

Deklarasi namespace default tidak berlaku langsung ke nama atribut; interpretasi dari atribut yang tidak difiksasi ditentukan oleh elemen di mana atribut tersebut muncul.

Jika Anda ingin atribut tersebut berada di namespace, terima penggunaan API dari awalan namespace untuk meletakkannya di sana.


Lihat juga

  • Nama dan elemen atribut XML dalam namespace default?
  • Ruang nama dan atribut XML