我的 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' });
如果字符串以空字符开头(编码为 \0),那么您可以:
var fixedData = receivedData.Trim(new[] { '\0' });
这两个示例都假定变量 receviedData 是包含您的数据的字符串。
如果您的结果必须是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)
:从此实例中检索子字符串。子字符串从指定的字符位置开始并具有指定的长度。我没有足够的信息来正确回答你,所以我会提出以下建议:
您应该尝试将从套接字接收的数据映射到可序列化的类。然后将 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 文件。我看到你的问题是这样的。