我需要解析来自TCP / IP连接的标准XML结构。数据保存为字符串变量。这意味着在任何给定的时间内,我手中的数据可能是不完整的(不完整的XML结构),或者是一个完整的XML结构,其中剩余的不完整(下一个XML结构的开头)。
大多数结构都不是'空的':
<Message>
<Param1 value = "val1"/>
<Param2 value = "val2"/>
</Message>
但也有'空':
<Message status="ack" />
所以只搜索</Message>
并进行拆分就不够好了。
如何从下一个部分结构中分割整个结构?除了为此创建自己的状态机并逐字节检查之外,是否有更清晰的解决方案?
答案 0 :(得分:0)
您可以为每封邮件使用字典
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();
}
}
}