Windows PhoneアプリでSocket通信を使用していますが、電話をかけると、次のような結果が得られることがあります。
\0\0\0\0<RESULT><DATA>...</DATA></RESULT>\0
開始と終了を削除してXMLのみを取得したいのですが、それを行うための最良の方法は何ですか?私は正規表現について考えましたが、それを機能させることはできません:(
Windows PhoneアプリでSocket通信を使用していますが、電話をかけると、次のような結果が得られることがあります。
\0\0\0\0<RESULT><DATA>...</DATA></RESULT>\0
開始と終了を削除してXMLのみを取得したいのですが、それを行うための最良の方法は何ですか?私は正規表現について考えましたが、それを機能させることはできません:(
プロトコルに問題があるように聞こえますが、\ 0文字を削除するには、文字列を簡単にトリミングできます。
文字列に実際の\文字と0文字が含まれている場合は、次のように実行できます。
var fixedData = receivedData.Trim(new[] { '\\', '0' });
また、文字列がnull文字(\ 0としてエンコード)で始まる場合は、次のことができます。
var fixedData = receivedData.Trim(new[] { '\0' });
どちらの例も、変数receviedDataがデータを含む文字列であると想定しています。
私はあなたに正しく答えるのに十分な情報を持っていないので、私は次のことを提案します:
ソケットから受信するデータをシリアル化可能なクラスにマップするようにしてください。次に、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ファイルにシリアル化します。私はあなたの問題のためにこのようなものを見ます。
結果が必要で、文字列の先頭または末尾に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)
:このインスタンスからサブストリングを取得します。サブストリングは、指定された文字位置から始まり、指定された長さを持ちます。