You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将任意XML读取到通用层级类以实现通用XML查看器

通用XML查看器:XML转自定义层级结构实现

需求说明

需要实现一个通用XML查看器,能将任意有效XML转换为指定的层级格式展示。

示例XML

<Settings>
    <User Name="Terry" BDay="09-01-1966">
        <Spouse>
            <Name>Jerri</Name>
        </Spouse>
    </User>
    <User Name="Cliff" BDay="10-18-1980"/>
</Settings>

期望展示格式

Settings =    
    User =        
        .Name = Terry
        .BDay = 09-01-1966
        Spouse =
            Name = Jerri        
    User =
        .Name = Cliff
        .BDay = 10-18-1980

规则:

  • 属性在标签名前加.标识
  • 子节点和属性按层级缩进

已定义的层级类

public class XHierarchy
{
    public string Name { get; set; }
    public string Value { get; set; }
    public List<XHierarchy> Items { get; set; } = new List<XHierarchy>();
}

手动构造测试数据时该类可正常工作,但不清楚如何将任意XML文件的数据读取到这个类中,要求方案适配任意有效XML,而非仅特定Schema的XML。


解决方案

利用.NET的System.Xml.Linq命名空间下的XDocument递归解析XML,将节点、属性转换为XHierarchy实例即可实现通用性:

核心解析代码

using System.Xml.Linq;

public static class XmlHierarchyConverter
{
    public static XHierarchy ConvertXmlToHierarchy(string xmlContent)
    {
        var doc = XDocument.Parse(xmlContent);
        return ConvertXElementToHierarchy(doc.Root);
    }

    public static XHierarchy ConvertXmlFileToHierarchy(string filePath)
    {
        var doc = XDocument.Load(filePath);
        return ConvertXElementToHierarchy(doc.Root);
    }

    private static XHierarchy ConvertXElementToHierarchy(XElement element)
    {
        var hierarchy = new XHierarchy
        {
            Name = element.Name.LocalName,
            // 仅保留非空白的节点文本内容
            Value = string.IsNullOrWhiteSpace(element.Value) ? null : element.Value.Trim()
        };

        // 处理XML属性:属性名称前添加"."标识
        foreach (var attr in element.Attributes())
        {
            hierarchy.Items.Add(new XHierarchy
            {
                Name = $".{attr.Name.LocalName}",
                Value = attr.Value
            });
        }

        // 递归处理子节点
        foreach (var childElement in element.Elements())
        {
            hierarchy.Items.Add(ConvertXElementToHierarchy(childElement));
        }

        return hierarchy;
    }
}

代码说明

  1. 递归遍历:通过递归方法处理所有层级的XML节点,适配任意深度的XML结构
  2. 属性适配:将XML属性转换为名称带.的XHierarchy项,符合展示规则
  3. 文本处理:仅保留节点的非空白文本内容,避免无效空值
  4. 通用性保障:仅依赖XML的基础节点/属性结构,不绑定任何特定Schema,支持所有有效XML

后续扩展

解析得到XHierarchy实例后,可编写递归遍历方法,按照缩进规则输出格式化文本,即可得到期望的展示效果。


内容的提问来源于stack exchange,提问作者Stephen Lee Parker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:27:36