Pourquoi un préfixe d'espace de noms est-il ajouté à mon attribut XML?

Dec 14 2020

J'ai un violon ici :

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

J'ajoute un attribut avec un espace de noms sans préfixe. Il crée un préfixe de d1p1.

Pourquoi?

Réponses

1 kjhughes Dec 13 2020 at 23:52

Réponse au niveau du code

Parce que

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

place attributedans le www.windward.net, et le préfixe d'espace de noms est utilisé pour créer l'association.

Si vous ne voulez attributeêtre dans aucun espace de noms, supprimez l' "www.windward.net"argument d'espace de noms:

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

Réponse au niveau XML

Mettre à jour pour adresser le commentaire OP:

Ce que je veux, c'est que l'attribut ait l'espace de noms www.windward.net, mais sans préfixe. Comment puis je faire ça?

Cela revient à vouloir que les espaces de noms par défaut s'appliquent aux attributs, ce qui est contraire à la recommandation d'espace de noms XML :

Les déclarations d'espace de noms par défaut ne s'appliquent pas directement aux noms d'attributs; l'interprétation des attributs non préfixés est déterminée par l'élément sur lequel ils apparaissent.

Si vous souhaitez que ces attributs se trouvent dans un espace de noms, acceptez l'utilisation par l'API d'un préfixe d'espace de noms pour les y placer.


Voir également

  • Noms d'attributs et éléments XML dans l'espace de noms par défaut?
  • Espaces de noms et attributs XML