Question

Voici un code 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()

Je reçois une chaîne qui ressemble à:

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

Cela échappe seulement à la citation double, pas à la citation simple. Mais la documentation de XmlWriter.WriteAttributeString (String, String) dit:

  

Si la valeur de l'attribut comprend des guillemets simples ou doubles, ils sont   remplacé par & amp; quot; et & apos; respectivement.

Existe-t-il un indicateur à configurer pour que le document soit conforme à la documentation?

Était-ce utile?

La solution

Si vous utilisez. Net Reflector pour consulter le code, vous constaterez que la méthode System.Xml.XmlTextEncoder.Write (string) est appelée. Voici le code d'intérêt:

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

Lors de l'écriture d'une valeur d'attribut, un guillemet simple n'est pas échappé puisqu'il n'est pas nécessaire de l'être. C’est uniquement lors de l’écriture d’un élément de texte que & & amp; apos; " est utilisé.

Autres conseils

Ce n'est pas un bogue dans XmlWriter , c'est un bogue dans votre système hérité.

Si vous regardez la définition de AttValue dans la recommandation XML 1.0, vous verrez que le XmlWriter fait exactement ce qu'il est censé faire: si le La valeur d'attribut est délimitée par des apostrophes. Une valeur d'attribut peut contenir des guillemets. Si elle est délimitée par des guillemets, une valeur d'attribut peut contenir des apostrophes.

Vous pourriez éventuellement dériver une classe de XmlTextWriter et remplacer ses méthodes WriteAttributes et WriteAttributeString . Cela pourrait fonctionner. Attention toutefois aux espaces de noms et à l'encodage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top