Warum wird meinem XML-Attribut ein Namespace-Präfix hinzugefügt?

Dec 14 2020

Ich habe hier eine Geige :

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

Ich füge ein Attribut ohne Namespace ohne Präfix hinzu. Es wird ein Präfix von erstellt d1p1.

Warum?

Antworten

1 kjhughes Dec 13 2020 at 23:52

Antwort auf Codeebene

weil

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

Stellen Sie attributein das www.windward.net, und das Namespace-Präfix wird verwendet, um die Zuordnung herzustellen.

Wenn Sie attributesich in keinem Namespace befinden möchten , entfernen Sie das "www.windward.net"Namespace-Argument:

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

Antwort auf XML-Ebene

Update zur Adressierung des OP-Kommentars:

Ich möchte, dass das Attribut den Namespace hat www.windward.net, aber ohne Präfix. Wie kann ich das machen?

Dies bedeutet, dass Standard-Namespaces auf Attribute angewendet werden sollen, was der Empfehlung für XML-Namespaces widerspricht :

Standard-Namespace-Deklarationen gelten nicht direkt für Attributnamen. Die Interpretation nicht vorfixierter Attribute wird durch das Element bestimmt, auf dem sie erscheinen.

Wenn Sie möchten, dass sich diese Attribute in einem Namespace befinden, akzeptieren Sie die Verwendung eines Namespace-Präfix durch die API, um sie dort abzulegen.


Siehe auch

  • XML-Attributnamen und Elemente im Standard-Namespace?
  • XML-Namespaces und -Attribute