Mengapa awalan namespace ditambahkan ke atribut XML saya?
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
Jawaban tingkat kode
Karena
writer.WriteAttributeString("attribute", "www.windward.net", "5");
tempat attribute
ke dalam www.windward.net
, dan awalan namespace digunakan untuk membuat asosiasi.
Jika Anda tidak ingin attribute
berada 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