0

##################

更新: user2622016 のおかげで、">" が有効であることを確認しました。

さて、私のC#コードには、フィールドの1つに>"が値として含まれるクラスがあります。">" をエスケープせずに 、クラスを xml にシリアライズしたいと考えてい>ます。xmlSerializer クラスを使用しています。私のコードは次のとおりです。

 memoryStream = new System.IO.MemoryStream();
                System.Xml.XmlWriterSettings xmlWriterSettings = new System.Xml.XmlWriterSettings();
                xmlWriterSettings.Encoding = encoding;
                xmlWriterSettings.Indent = true;
                System.Xml.XmlWriter xmlWriter = XmlWriter.Create(memoryStream, xmlWriterSettings);
                Serializer.Serialize(xmlWriter, myObj);

「writeRaw」を使用してXML全体を記述せずにそれを達成する方法はありますか(クラス全体をシリアル化する必要があるため)?

##################

">" は XML で有効な文字ですか?

簡単な答えはノーです。私が知っているすべてに基づいています..(また、XMLの無効な文字

しかし、次のようなオンラインで利用可能なxml検証ツールでチェックしようとしているとき: http://www.w3schools.com/xml/xml_validator.asphttp://www.xmlvalidation.com/

次の xml が有効であると表示されます。

<?xml version="1.0" encoding="utf-8"?>
<object>
   <innerObj attrib="myAttrib">invalid char is > why valid</innerObj >
</object>

どのように可能ですか?

(私が尋ねている理由、私はこのxmlをc#のクラスとして取り、それをシリアライズしようとしています.明らかにそれは">"を"&gt;".にエスケープします.そして私はそれが起こりたくない..

この「有効で無効な」キャラクターについての説明と、シリアライゼーションの問題を解決する方法はありますか? )

ありがとう!!!

4

2 に答える 2

2

アンパサンド (&) と左山かっこ (<) 文字のみをテキストで使用することはできません。> 'より大きい' は、あいまいにならないため、xml テキスト フィールドではまったく問題ありません。2.4章を参照http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

アンパサンド文字 (&) と左山かっこ (<) は、マークアップ区切り文字として使用する場合、またはコメント、処理命令、または CDATA セクション内で使用する場合を除き、リテラル形式で使用してはなりません。他の場所で必要な場合は、数字参照または文字列「 & 」と「 < 」をそれぞれ使用してエスケープする必要があります。右山かっこ (>) は、文字列 " &gt;"&gt;を使用して表すことができ、互換性のために、" " またはコンテンツ内の文字列 " ]]> " に表示される文字参照を使用してエスケープする必要があります。 CDATA セクションの終わりをマークしていません。

なぜ C# は常に としてエスケープするの&gtですか? わかりませんが、以前の実装との互換性のためでしょうか?

標準的な実装者によると、あたかも彼が望むかのように > エスケープすることができ&gtますが、組み合わせてのみそうする必要があります]]>

于 2015-01-05T08:42:56.240 に答える
1

CDATA を使用できます。これを試して

<?xml version="1.0" encoding="utf-8"?>
<object>
  <innerObj attrib="myAttrib">invalid char is <![CDATA[>]]> why valid</innerObj >
</object>
于 2015-01-05T08:38:21.817 に答える