【问题标题】:Get XML from a string从字符串中获取 XML
【发布时间】:2012-08-08 09:58:46
【问题描述】:

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

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

我想删除它的开头和结尾,所以我只得到 XML,但是最好的方法是什么? 我曾考虑过正则表达式,但我无法使其工作:(

【问题讨论】:

  • 你在说什么?听起来很可能您的协议有点错误。
  • 我猜你可以使用string xml = ReturnString.Trim('\0');
  • @NikhilAgrawal 我已经尝试了很多东西,但是现在我正在尝试使用 2 个正则表达式,它们几乎相等并且看起来像这样 Regex.Replace(DataFromServer, "^.*?
  • @JonSkeet 在我向消息添加标题和结束字节后,通信正常
  • @yogi 试过了,但我一开始不工作,因为还有一些其他字母,我不能在这里复制粘贴(我不知道为什么,但 Visual Studio 将它们显示为问号)

标签: c# regex windows-phone-7.1


【解决方案1】:

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

如果您的字符串中有实际的 \ 和 0 个字符,那么您可以执行以下操作:

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

如果字符串以空字符开头(编码为 \0),那么您可以:

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

这两个示例都假设变量 receviedData 是一个包含您的数据的字符串。

【讨论】:

  • 这不会删除所有字符 :(
  • 如果您的字符多于示例代码中的字符,那么您必须在调用 .Trim 时也添加它们。
【解决方案2】:

我没有足够的信息来正确回答你,所以我会建议以下:

您应该尝试将从套接字接收的数据映射到可序列化的类。 然后将 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 文件。我看到你的问题是这样的。

【讨论】:

  • 我无法完成这项工作,因为 Windows Phone 仅支持异步套接字通信
【解决方案3】:

如果您的结果必须是 XML 并且更多字符(否则 \0)可以在字符串的开头或结尾,这些代码可能很有用:

var start = inputString.IndexOf('<');
var end = inputString.LastIndexOf('>');
var result = inputString.Substring(start, end - start);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多