0

.net FrameworkのXmlTextWriterを使用して、C#からいくつかのxmlを書き出しています。これは問題なく動作します。私が書き出す文字列の一部には、文字値5が含まれています(文字「5」を意味するのではなく、ASCII値5を意味することに注意してください)。

これで、xml仕様から、この文字がxmlで無効であることがわかりました。ただし、それが違法であるかどうかは関係ありません。xml(非準拠)ドキュメントに含める必要があります。これは、バイナリデータを含む可能性のある文字列をドキュメントに書き込むことができるようにするためです。

わかりました。System.Xml.XmlTextWriterはこれらの不正なxml文字を正常に書き込み、xmlにとしてエンコードし"&#5x;"ます。しかし、その後、MSXML2.SAXXMLReader.6.0を使用してC++アプリでそれらを読みたいと思います。このパーサーは、これらの文字の1つに遭遇すると、fatalErrorを発生させます。

パーサーのプロパティのいくつかを変更して、パーサーを機能させるようにしました。IEがこのパーサーを内部で使用していることは私の理解であり、IEokで不正なxmlをロードできます。それで、私ができないとき、IEはどのようにそれを解析することができますか。

私は何かが足りないのですか?IEは別のパーサーを使用しますか?MSXML2.SAXXMLReader.6.0パーサーを機能させる方法はありますか?別のパーサーを使用する必要がありますか(もしそうなら、ソースコードが利用できるパーサーをお勧めします。そうすれば、希望どおりに機能しない場合に修正できます)。

これらの不正な文字を解析できるようにするために、.Netパーサーに設定できるプロパティがあります。SAXパーサーでC++から使用できる同等のものを探していると思います。 http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.checkcharacters.aspx

どうもありがとう、-
スコット

CDATAセクションでこの文字をエンコードできるとは思わない。ここを参照してください:http: //msdn.microsoft.com/en-us/library/ms256076
(VS.85).aspx そして、たとえそうだったとしても。CDATAセクションを使用したくないので、属性値に文字を使用したい。また、base64でエンコードできることもわかっていますが、それもやりたくありません...法律に違反したいので、違法なxmlを解析できるようにしたいのです。

4

1 に答える 1

2

いいえ、XML の制御文字を解析することはできません。

正確に言うと、これはあなたの文書を XML 文書以外のものにしてしまいます。

これは、仕様のハードワイヤード部分です。不正な文字を解析したい場合は、独自の NON-COMPLIANT パーサーを作成する必要があります。

ごとに:

http://lists.xml.org/archives/xml-dev/199804/msg00502.html

于 2009-05-20T15:16:19.640 に答える