使用 C# LINQ 解析 XML 文档

Posted

技术标签:

【中文标题】使用 C# LINQ 解析 XML 文档【英文标题】:Parse an XML document using C# LINQ 【发布时间】:2021-08-16 05:47:14 【问题描述】:

我正在尝试解析这个 XML 文档 -

<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns:data="report">
   <Report>
      <GroupName Descriptor="Administrator">
         <ID type="ID">1</ID>
         <ID type="Group">Administrator</ID>
      </GroupName>
      <Members Name="12345 / john smith ">
         <ID type="ID">1</ID>
         <ID type="UserID">12345</ID>
         <ID type="UserName">jsmith</ID>
      </Members>
   </Report>
   <Report>
      <GroupName Descriptor="User">
         <ID type="ID">1</ID>
         <ID type="Group">User</ID>
      </GroupName>
      <Members Name="14568/Bob smith">
         <ID type="ID">1</ID>
         <ID type="UserID">14568</ID>
         <ID type="UserName">bsmith</ID>
      </Members>
      <Members Name="14597/Tommy lee">
         <ID type="ID">1</ID>
         <ID type="UserID">14597</ID>
         <ID type="UserName">tlee</ID>
      </Members>
   </Report>
</Data>

我想要用户列表,比如 -

jsmith Administrator
bsmith User
tlee   User

我尝试了 Xpath 和 Descendants 都没有产生我想要的结果

【问题讨论】:

你的努力在哪里?你的 C# 代码在哪里?此外,您想要的输出与源 XML 不匹配。 【参考方案1】:

尝试以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1

    class Program
    
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        
            XDocument doc = XDocument.Load(FILENAME);

            List<Group> groups = doc.Descendants("Report").Select(x => new Group()
            
                groupName = (string)x.Element("GroupName").Attribute("Descriptor"),
                userNames = x.Elements("Members").Select(y => (string)y.Attribute("Name")).ToArray()
            ).ToList();
        
    
    public class Group
    
        public string groupName  get; set; 
        public string[] userNames  get;set;
    

【讨论】:

以上是关于使用 C# LINQ 解析 XML 文档的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用 Linq to XML 在文档中搜索不同的 XML 结构

在 C# 中使用 LINQ-To-XML 解析具有多个列表和类对象的 XML 数据

使用 Linq 解析 XML 文档时只获取第一个值

解析 XML SOAP 响应 C#

linq 解析 带命名空间的xml

用 c# 创建 xml 文档并用 perl 解析它