0

Windows フォームに埋め込まれた Flash コンポーネントからデータを受信して​​います。残念ながら、ソケットから返されたデータに次のいずれかの文字が含まれている場合、以下の loadXml の呼び出しは失敗します。

これは、(Flash コンポーネントの ExternalInterface を介して) ソケットからデータを受信するために必要なコールバック メソッドです。

private void player_FlashCall(object sender, _IShockwaveFlashEvents_FlashCallEvent e)
{
            String output = e.request;
            //output = CleanInvalidXmlChars(output);
            XmlDocument document = new XmlDocument();
            document.LoadXml(output);

            XmlAttributeCollection attributes = document.FirstChild.Attributes;
            String command = attributes.Item(0).InnerText;              
            XmlNodeList list = document.GetElementsByTagName("arguments");               
            process(list[0].InnerText);

文字をテキストに置き換える方法(CleanInvalidXmlChars)がありましたが、これは正しいアプローチではないと思います。

このデータを XML ファイルにロードするにはどうすればよいですか。これにより、返されるメソッド名、パラメーター名、およびパラメーターの型が非常に簡単に分離できるようになります。

何か助けていただければ幸いです。

ありがとう。

4

1 に答える 1

0

「XML」にU+0001(別名「\ x01」)または他の同様の文字が含まれている場合、それは有効なXMLではありません。これらの文字をXMLに含める方法はありません(とにかく、XML 1.0では)。XML仕様を参照してください。たとえば、XMLでバイナリデータを渡す必要がある場合は、たとえばBase-64を使用して、それらを適切な形式に変換する必要があります。

データにこれらの無効な文字が含まれている場合、それはXMLではないため、標準のXMLツールを使用して読み取ることはできません(標準の.NETクラスでその動作をオーバーライドできるとは思いません)。これらの文字をすべて置き換えることができます(これらは基本的に、U + 0009(タブ)、U+000AおよびU+000D(CR + LF)、およびU +FFFEおよびUを除くすべての制御文字(U+0000からU+001F)です。 + FFFF(文字以外))試してみる前に–データを失わない安全な変換を考案できます(たとえば、最初にすべての@文字を@ 0040に置き換え、次に無効な文字を@xxxxに置き換えます。ここでxxxxはコードです。解析されたXMLデータを処理するときは、すべての@xxxxを元に戻します)。

もう1つのオプションは、XMLのアイデアを削除し、それを文字列として処理することです。インスピレーションを得るために、たとえばこのコードを参照してください。

于 2012-09-06T21:09:51.467 に答える