Dlaczego przedrostek przestrzeni nazw jest dodawany do mojego atrybutu XML?

Dec 14 2020

Mam tu skrzypce :

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

Dodaję atrybut z przestrzenią nazw bez prefiksu. Tworzy przedrostek d1p1.

Dlaczego?

Odpowiedzi

1 kjhughes Dec 13 2020 at 23:52

Odpowiedź na poziomie kodu

Dlatego

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

umieszcza attributesię w www.windward.net, a przedrostek przestrzeni nazw służy do tworzenia asocjacji.

Jeśli nie chcesz attributebyć w żadnej przestrzeni nazw, usuń "www.windward.net"argument namespace:

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

Odpowiedź na poziomie XML

Aktualizacja adresu komentarza OP:

Chcę, aby atrybut miał przestrzeń nazw www.windward.net, ale bez przedrostka. Jak mogę to zrobić?

To sprowadza się do chęci zastosowania domyślnych przestrzeni nazw do atrybutów, co jest sprzeczne z zaleceniem przestrzeni nazw XML :

Domyślne deklaracje przestrzeni nazw nie dotyczą bezpośrednio nazw atrybutów; interpretacja atrybutów bez prefiksu jest określana przez element, na którym się pojawiają.

Jeśli chcesz, aby te atrybuty znajdowały się w przestrzeni nazw, zaakceptuj użycie przez interfejs API prefiksu przestrzeni nazw, aby je tam umieścić.


Zobacz też

  • Nazwy i elementy atrybutów XML w domyślnej przestrzeni nazw?
  • Przestrzenie nazw i atrybuty XML