Pergunta

Aqui está algum código C#:

var sb = new StringBuilder();
var w = XmlWriter.Create(sb);
w.WriteStartElement("hello");
w.WriteAttributeString("target", "world ' \" !");
w.WriteEndElement();
w.Flush();
// then look at sb.ToString()

Estou recebendo uma corda que parece:

 <?xml version="1.0" encoding="utf-16"?><hello target="world ' &quot; !" /> 

Está apenas escapando da quadra dupla, não da única citação. Mas os documentos para xmlwriter.writeattributestring (string, string) dizem:

Se o valor do atributo incluir cotações duplas ou únicas, elas serão substituídas por "e 'respectivamente.

Existe alguma bandeira que eu preciso definir para fazer o que os documentos dizem que faz?

Foi útil?

Solução

Se você usar o .NET Reflector para olhar para o código, você descobrirá que o método System.xml.xmltextExoder.Write (String) está sendo chamado. Aqui está o código de interesse:

if (!this.inAttribute || (this.quoteChar != ch))
   this.textWriter.Write('\'');
else
   this.WriteEntityRefImpl("apos");

Ao escrever um valor de atributo, uma única cotação não é escapada, pois não precisa ser. É apenas quando escreve um elemento de texto que "" é usado.

Outras dicas

Este não é um bug no XmlWriter, é um bug no seu sistema legado.

Se você olhar para a definição de AttValue Na recomendação XML 1.0, você verá que o XmlWriter está fazendo exatamente o que deveria estar fazendo: se o valor do atributo for delimitado com apóstrofos, um valor de atributo pode conter as cotações e se for delimitado com aspas, um valor de atributo pode conter apóstrofos.

Você poderia, concebivelmente, derivar uma classe de XmlTextWriter e substituir seu WriteAttributes e WriteAttributeString métodos. Isso pode funcionar. Cuidado com os namespaces e a codificação, se você fizer isso, no entanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top