C# 从字符串中获取XML

C# 从字符串中获取XML,c#,regex,windows-phone-7.1,C#,Regex,Windows Phone 7.1,我的Windows Phone应用程序中有一个套接字通信,但当我调用它时,有时会得到一个结果,看起来是这样的 \0\0\0\0<RESULT><DATA>...</DATA></RESULT>\0 \0\0\0\0…\0 我想删除它的开头和结尾,所以我只获取XML,但是最好的方法是什么? 我已经考虑过正则表达式,但我无法使其工作:(听起来您的协议有问题,但是要删除\0个字符,您可以对字符串进行简单的修剪 如果字符串中包含实际\和0个字符,则可

我的Windows Phone应用程序中有一个套接字通信,但当我调用它时,有时会得到一个结果,看起来是这样的

\0\0\0\0<RESULT><DATA>...</DATA></RESULT>\0 
\0\0\0\0…\0
我想删除它的开头和结尾,所以我只获取XML,但是最好的方法是什么?
我已经考虑过正则表达式,但我无法使其工作:(

听起来您的协议有问题,但是要删除\0个字符,您可以对字符串进行简单的修剪

如果字符串中包含实际\和0个字符,则可以执行以下操作:

var fixedData = receivedData.Trim(new[] { '\\', '0' });
如果字符串以空字符(编码为\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
,并且字符串的开头或结尾可以有更多字符(否则
\0
),这些代码可能会很有用:

var start = inputString.IndexOf('<');
var end = inputString.LastIndexOf('>');
var result = inputString.Substring(start, end - start);
var start=inputString.IndexOf(“”);
var result=inputString.Substring(start,end-start);
  • :报告此字符串中第一次出现的指定Unicode字符的从零开始的索引
  • :报告此实例中指定Unicode字符最后一次出现的从零开始的索引位置
  • :从此实例检索子字符串。该子字符串从指定的字符位置开始,并具有指定的长度

你在说什么?听起来很可能你的协议有点错误。你可以使用
string xml=ReturnString.Trim('\0');
我想。@NikhilAgrawal我试过很多方法,但现在我试着用两个正则表达式,它们几乎相等,看起来像这个正则表达式。Replace(DataFromServer,“^.*?@JonSkeet在我将头和结束字节添加到message@yogi这是尝试过的,但我在开始时不工作,因为还有其他一些字母,我无法在此处复制粘贴(我不知道为什么,但Visual Studio将它们显示为问号)我无法做到这一点,因为Windows Phone仅支持异步套接字通信。这不会删除所有字符:(如果您的字符数超过示例代码中的字符数,则必须在调用.Trim时也添加这些字符。