Por que um prefixo de namespace está sendo adicionado ao meu atributo XML?
Eu tenho um violino aqui :
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);
}
}
Estou adicionando um atributo sem um namespace sem prefixo. Ele está criando um prefixo de d1p1
.
Por quê?
Respostas
Resposta em nível de código
Porque
writer.WriteAttributeString("attribute", "www.windward.net", "5");
coloca attribute
no www.windward.net
e o prefixo do namespace é usado para fazer a associação.
Se você quiser attribute
estar em nenhum namespace, remova o "www.windward.net"
argumento do namespace:
writer.WriteAttributeString("attribute", "5");
Resposta em nível XML
Atualização para endereço de comentário OP:
O que eu quero é que o atributo tenha o namespace
www.windward.net
, mas sem prefixo. Como eu posso fazer isso?
Isso equivale a querer que os namespaces padrão se apliquem aos atributos, o que é contrário à recomendação do namespace XML :
As declarações de namespace padrão não se aplicam diretamente a nomes de atributos; a interpretação de atributos não prefixados é determinada pelo elemento no qual eles aparecem.
Se você deseja que esses atributos estejam em um namespace, aceite o uso da API de um prefixo de namespace para colocá-los lá.
Veja também
- Nomes de atributos XML e elementos no namespace padrão?
- Namespaces e atributos de XML