Frage

Hier ist ein C# Code:

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()

Ich bekomme eine Zeichenfolge, die aussieht:

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

Es entkommt nur aus dem Doppelzitat, nicht dem Single-Quot. Aber die Dokumente für XMLWriter.WriteAttributestring (String, String) sagen:

Wenn der Attributwert doppelte oder einzelne Zitate enthält, werden sie durch "bzw. 'bzw.' ersetzt.

Gibt es eine Flagge, die ich festlegen muss, damit es das tut, was die Dokumente sagen?

War es hilfreich?

Lösung

Wenn Sie .NET -Reflektor verwenden, um den Code zu betrachten, werden Sie feststellen, dass die Methode der System.xml.xmltextCoder.write (String) aufgerufen wird. Hier ist der Interessenskodex:

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

Beim Schreiben eines Attributwerts wird ein einzelnes Zitat nicht entkommen, da dies nicht der Fall sein muss. Nur beim Schreiben eines Textelements wird "" "verwendet.

Andere Tipps

Dies ist kein Fehler in der XmlWriter, Es ist ein Fehler in Ihrem Legacy -System.

Wenn Sie sich die Definition von ansehen AttValue In der XML 1.0 -Empfehlung sehen Sie, dass die XmlWriter Tun Sie genau das, was es tun soll: Wenn der Attributwert mit Apostrophen abgrenzt wird, kann ein Attributwert Anführungszeichen enthalten, und wenn er mit Anführungszeichen abgrenzt wird, kann ein Attributwert Apostrophen enthalten.

Sie könnten möglicherweise eine Klasse von einer Klasse abgeben XmlTextWriter und überschreiben seine WriteAttributes und WriteAttributeString Methoden. Das könnte funktionieren. Achten Sie jedoch auf Namespaces und Codierung, wenn Sie dies tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top