0

Windows PhoneアプリでSocket通信を使用していますが、電話をかけると、次のような結果が得られることがあります。

\0\0\0\0<RESULT><DATA>...</DATA></RESULT>\0 

開始と終了を削除してXMLのみを取得したいのですが、それを行うための最良の方法は何ですか?私は正規表現について考えましたが、それを機能させることはできません:(

4

3 に答える 3

1

プロトコルに問題があるように聞こえますが、\ 0文字を削除するには、文字列を簡単にトリミングできます。

文字列に実際の\文字と0文字が含まれている場合は、次のように実行できます。

var fixedData = receivedData.Trim(new[] { '\\', '0' });

また、文字列がnull文字(\ 0としてエンコード)で始まる場合は、次のことができます。

var fixedData = receivedData.Trim(new[] { '\0' });

どちらの例も、変数receviedDataがデータを含む文字列であると想定しています。

于 2012-08-08T10:07:00.233 に答える
0

私はあなたに正しく答えるのに十分な情報を持っていないので、私は次のことを提案します:

ソケットから受信するデータをシリアル化可能なクラスにマップするようにしてください。次に、classObjectをXMLドキュメントにシリアル化します。

public class socketDataToMap
{
    public string Data {get; set;}
}

その後

var ser = new XmlSerializer(typeof(socketDataToMap));
using (var reader = XmlReader.Create(yourSocketStream))
            {
                var deserializedObject = ser.Deserialize(reader) as socketDataToMap;

            }

次に、XMLファイルにシリアル化します。私はあなたの問題のためにこのようなものを見ます。

于 2012-08-08T10:08:15.773 に答える
0

結果が必要で、文字列の先頭または末尾にXMLさらに多くの文字(else \0)を含めることができる場合は、次のコードが役立ちます。

var start = inputString.IndexOf('<');
var end = inputString.LastIndexOf('>');
var result = inputString.Substring(start, end - start);
  • String.IndexOf Method (Char):この文字列で指定されたUnicode文字が最初に出現するゼロベースのインデックスを報告します。
  • String.LastIndexOf Method (Char):このインスタンス内で最後に出現したUnicode文字のゼロベースのインデックス位置を報告します。
  • String.Substring Method (Int32, Int32):このインスタンスからサブストリングを取得します。サブストリングは、指定された文字位置から始まり、指定された長さを持ちます。
于 2012-08-08T10:57:15.807 に答える