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

标签 c# xml tcp

我需要解析来自 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/

相关文章:

c# - 查找大约相同数字的最大数量c#

java - 如何仅更改一个字段来创建多个 xml 请求?

python - 保存或读取 XML 文件不起作用

.net - 处理数千个连接的最佳方式

networking - 如果 UDP 不可靠,为什么在传输层使用它

c# - WinHttp异常 : The connection with the server was terminated abnormally

c# - 如何构建动态命令对象?

c# - Verify() 和 Setup()...VerifyAll() 之间的最小起订量区别

android - 在 android 中使用 drawable 设置按钮的边距

java - 尝试传输文件时套接字关闭异常