我需要解析来自 TCP/IP 连接的标准 XML 结构。数据保存为字符串变量。这意味着在任何给定时间,我手中的数据都可能不完整(不完整的 XML 结构),或者完整的 XML 结构有不完整的剩余部分(下一个 XML 结构的开头)。
大多数结构不是“空”的:
<Message>
<Param1 value = "val1"/>
<Param2 value = "val2"/>
</Message>
但也有“空”的:
<Message status="ack" />
所以只需搜索 </Message>
并在那里进行拆分还不够好。
如何从下一个部分结构中分离出完整的结构?除了为此创建我自己的状态机并逐字节检查之外,是否有更简洁的解决方案?
最佳答案
你可以为每条消息使用字典
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input =
"<Message>" +
"<Param1 value = \"val1\"/>" +
"<Param2 value = \"val2\"/>" +
"</Message>" +
"<Message>" +
"<Param1 value = \"val1\"/>" +
"<Param2 value = \"val2\"/>" +
"</Message>";
XElement message =
new XElement("Root", input);
var results = message.Elements("Message")
.Where(x => x.HasElements)
.Select(x => x.Elements()
.GroupBy(y => y.Name.LocalName, z => z)
.ToDictionary(y => y.Key, z => (string)z.FirstOrDefault()
.Attribute("value")))
.ToList();
}
}
}
关于c# - 解析来自 TCP/IP 连接的 XML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43967265/