解析来自TCP / IP连接的XML字符串

时间:2017-05-14 18:07:07

标签: c# xml tcp

我需要解析来自TCP / IP连接的标准XML结构。数据保存为字符串变量。这意味着在任何给定的时间内,我手中的数据可能是不完整的(不完整的XML结构),或者是一个完整的XML结构,其中剩余的不完整(下一个XML结构的开头)。

大多数结构都不是'空的':

<Message>
  <Param1 value = "val1"/>
  <Param2 value = "val2"/>
</Message>

但也有'空':

<Message status="ack" />

所以只搜索</Message>并进行拆分就不够好了。

如何从下一个部分结构中分割整个结构?除了为此创建自己的状态机并逐字节检查之外,是否有更清晰的解决方案?

1 个答案:

答案 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();
        }
    }
}