XML属性に名前空間プレフィックスが追加されるのはなぜですか?

Dec 14 2020

私はここにフィドルを持っています:

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

プレフィックス名前空間のない属性を追加しています。のプレフィックスを作成していますd1p1

どうして?

回答

1 kjhughes Dec 13 2020 at 23:52

コードレベルの回答

なぜなら

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

に配置attributeし、www.windward.net名前空間プレフィックスを使用して関連付けを行います。

attribute名前空間を使用しない場合は、"www.windward.net"名前空間引数を削除します。

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

XMLレベルの回答

OPコメントに対処するための更新:

私が欲しいのは、属性に名前空間を持たせることですが、www.windward.netプレフィックスはありません。どうやってやるの?

これは、デフォルトの名前空間を属性に適用することを意味します。これは、XML名前空間の推奨事項とは反対です。

デフォルトの名前空間宣言は、属性名に直接適用されません。接頭辞のない属性の解釈は、それらが表示される要素によって決定されます。

これらの属性を名前空間に含める場合は、APIによる名前空間プレフィックスの使用を受け入れて属性を配置します。


も参照してください

  • デフォルトの名前空間のXML属性名と要素?
  • XML名前空間と属性