2009-07-01 14 views
0

私はXMLサービスを大きく使用しています(契約では複雑なタイプをパラメータとして渡します)。最近、私は、.Net XML Serializationエンジンが、よく知られている5つの予約文字をエスケープしていることに気付きました。これは、要素内に含めるとエスケープする必要があります(<、>、&、 'and ")。 、いつも。「私のため.Net XMLのシリアライズとエスケープまたはエンコードされた文字

の外を見てしかし、私は実験を始め、それが唯一の<をエスケープされて気づいた、>と&、そしていくつかの理由ではないアポストロフィと二重引用符のために。例えば私は、このリテラル文字列を返す場合

Bad:<>&'":Data 

これは、私のサービスからの複雑なタイプのフィールドです(これは、Fidd ler):

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

これに遭遇した理由は何ですか?シリアライザは単にそれらを見落としているのですか、それともこの理由がありますか?私はそれを理解したよう」と 『XML要素内の有効な仕様ではありません

答えて

3

XML specによれば、 gularコンテンツとマークアップ:エスケープ文字

  • <は常にそれが要素の開始を決定するので&lt;ようにエスケープする必要がありますので

    • &は常に&amp;のようにエスケープする必要があります。安全のために属性内でエスケープされ、パーサーのエラー検出を簡単にする必要があります。
    • >&gt;のようにエスケープする必要がありますが、多くの場合'
    • "で区切られた属性に&quot;のみであるかのようにエスケープする必要がある場合にのみ、&apos;としてエスケープする<
    • 'ニーズに対称性のためですされません処理命令、コメントやCDATAセクションの内部"

    で区切られた属性、ルールがいくつかの変更が、詳細はです2.4 Character Data and Markupの仕様の一部です。

    シリアライザは、ファイルを人間が読める形式に保つことによって、あなたの好意を得ようとしています。

    (上記のそれぞれは、同等の数値を使用してエスケープすることもできます)

  • +0

    素晴らしいです。私の考えを修正してくれてありがとう。 – BrettRobi

    0

    XMLSpyには、あなたは間違っていると言い、次は整形式のXMLです。。から別に

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

    』 XMLSpyを参照して議論する "というより良い議論は、XMLシリアライザが7年以上にわたり野生で出てきたことです。この時点で、誰かがNameプロパティで" O'Brien "をシリアル化しようとしていることを保証します。今までに注目されている。

    関連する問題