2009-07-01 9 views
0

Ich verwende XML-Serialisierung stark in einem Webdienst (die Verträge übergeben komplexe Typen als Parameter). Kürzlich ist mir aufgefallen, dass die .Net XML Serialization Engine einige der bekannten 5 reservierten Zeichen entkommt, die in einem Element (<,>, &, 'und ") maskiert werden müssen. Meine erste Reaktion war" good old .Net , immer für mich Blick“..Net XML-Serialisierung und Escaped oder Encoded Zeichen

Aber dann begann ich zu experimentieren und bemerkte es nur entweicht die <,> und &, und aus irgendeinem Grunde nicht das Apostroph und Anführungszeichen gesetzt wird. zum Beispiel, wenn ich wieder diese Zeichenkette in ein Feld innerhalb eines komplexen Typs von meinem Service:

Bad:<>&'":Data 

Dies ist, was über die Leitung übertragen wird (wie von FIDD gesehen ler):

Bad:&lt;&gt;&amp;'":Data 

Hat jemand in das hineingeraten oder verstehen, warum das ist? Überschaut der Serializer sie einfach oder gibt es einen Grund dafür? Wie ich es die "und‚nicht durch spec gültig innerhalb eines XML-Elements

Antwort

3

Nach der XML spec, für re eckiger Inhalt und Markup:

  • & muss immer als &amp; entkommen, weil es das Escape-Zeichen ist
  • < immer als &lt; entkommen werden muss, da es den Beginn eines Elements bestimmt. Es muss sogar innerhalb von Attributen als Sicherheit maskiert werden und die Erkennung von Schreibparserfehlern vereinfacht werden.
  • > muss nicht als &gt; entgangen sein, aber oft ist für Symmetrie mit <
  • braucht ' als &apos; nur entkommen, wenn in einem Attribut begrenzt durch '
  • " Bedürfnisse als &quot; nur entkommen, wenn in ein Attribut begrenzt durch "

Innerhalb von Verarbeitungsanweisungen, Kommentare und CDATA Abschnitte, ändern sich die Regeln einigen, aber die Details sind in der 2.4 Character Data and Markup Teil der Spezifikation.

Ihr Serializer versucht Ihnen einen Gefallen zu tun, indem er die Datei lesbar hält.

(Jeder der oben genannten kann auch mit ihren numerischen Entsprechungen maskiert werden.)

+0

Awesome, Sie sind genau richtig. Danke, dass du mein Denken korrigiert hast. – BrettRobi

0

XMLSpy sagt, Sie sind falsch finden Sie wohlgeformte XML..:

<root> 
    <data>'"</data> 
</root> 

Abgesehen von‘verstehen Argument mit Bezug auf XMLSpy ", ein besseres Argument ist, dass der XML-Serializer seit über sieben Jahren in der Wildnis gewesen ist. In dieser Zeit, ich garantiere, jemand hat versucht," O'Brien "in einer Eigenschaft Name zu serialisieren. Dieser Fehler würde wurden jetzt bemerkt ..