XML özniteliğime neden bir ad alanı öneki ekleniyor?

Dec 14 2020

Burada bir keman var :

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

Önek ad alanı olmayan bir öznitelik ekliyorum. Bir önek oluşturuyor d1p1.

Neden?

Yanıtlar

1 kjhughes Dec 13 2020 at 23:52

Kod düzeyinde cevap

Çünkü

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

yerleri attributeiçine www.windward.netve ad öneki ilişkilendirmeyi yapmak için kullanılır.

Ad alanında olmak istemiyorsanız attribute, "www.windward.net"ad alanı bağımsız değişkenini kaldırın :

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

XML düzeyinde yanıt

OP yorumunu ele almak için güncelleme:

İstediğim şey, özniteliğin ad alanına sahip olması www.windward.net, ancak önek içermemesidir. Bunu nasıl yapabilirim?

Bu, varsayılan ad alanlarının özniteliklere uygulanmasını istemek anlamına gelir; bu, XML Ad Alanı önerisine aykırıdır :

Varsayılan ad alanı bildirimleri doğrudan öznitelik adlarına uygulanmaz; öneksiz özniteliklerin yorumlanması, üzerinde göründükleri öğe tarafından belirlenir.

Bu özniteliklerin bir ad alanında olmasını istiyorsanız, API'nin bunları oraya koymak için bir ad alanı öneki kullanmasını kabul edin.


Ayrıca bakınız

  • Varsayılan ad alanındaki XML öznitelik adları ve öğeleri?
  • XML ad alanları ve nitelikleri