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

如何用C#的XmlDocument遍历XML的Child节点并查找对角属性

C#读取XML对角属性的解决方案

遍历Child节点的两种方式

你已经获取了Parent节点,这里提供两种遍历所有Child节点的方法,无需手动逐个移动节点:

方法1:直接获取Child节点集合(推荐)

通过SelectNodes一次性获取Parent下所有Child元素,用foreach遍历即可,无需处理XML空白节点的问题:

// 假设已获取Parent节点XmlNode parentNode
XmlNodeList childNodes = parentNode.SelectNodes("Child");
foreach (XmlNode child in childNodes)
{
    // 处理当前Child节点
    // ...
}

方法2:手动移动到下一个Child节点

如果必须从第一个Child节点开始逐个跳转,需要跳过XML中的空白文本节点(换行、缩进会被解析为Text节点):

XmlNode currentChild = parentNode.SelectSingleNode("Child"); // 获取第一个Child节点
while (currentChild != null)
{
    // 处理当前Child节点
    // ...

    // 跳过空白节点,移动到下一个Child元素
    currentChild = currentChild.NextSibling;
    while (currentChild != null && currentChild.NodeType != XmlNodeType.Element)
    {
        currentChild = currentChild.NextSibling;
    }
}

实现对角属性查找逻辑

结合你的需求,根据输入的属性名,在{AttrName11,AttrName22,AttrName33...}集合中找到第一个匹配项并获取值,完整代码示例:

using System;
using System.Xml;

public class XmlMatrixHandler
{
    public string FindDiagonalAttributeValue(XmlDocument xmlDoc, string targetAttr)
    {
        // 先验证目标属性是否为对角属性
        if (!IsValidDiagonalAttr(targetAttr))
        {
            Console.WriteLine("输入的属性名不是对角属性");
            return null;
        }

        // 获取Parent节点
        XmlNode parent = xmlDoc.SelectSingleNode("/Parent");
        if (parent == null)
        {
            Console.WriteLine("未找到Parent节点");
            return null;
        }

        // 遍历Child节点,匹配对角属性
        XmlNodeList children = parent.SelectNodes("Child");
        int childSeq = 1; // 第1个Child对应AttrName11,以此类推

        foreach (XmlNode child in children)
        {
            string expectedAttr = $"AttrName{childSeq:D2}";
            if (expectedAttr == targetAttr)
            {
                XmlAttribute attr = child.Attributes[targetAttr];
                return attr?.Value;
            }
            childSeq++;
        }

        Console.WriteLine("未找到匹配的对角属性");
        return null;
    }

    // 判断属性名是否符合对角属性格式(AttrNameNN,NN为相同数字)
    private bool IsValidDiagonalAttr(string attrName)
    {
        if (string.IsNullOrEmpty(attrName) || !attrName.StartsWith("AttrName"))
            return false;

        if (attrName.Length != 10) // "AttrNameXX"共10个字符
            return false;

        char d1 = attrName[8];
        char d2 = attrName[9];
        return char.IsDigit(d1) && char.IsDigit(d2) && d1 == d2;
    }
}

使用示例

XmlDocument doc = new XmlDocument();
doc.Load("你的XML文件路径.xml");

XmlMatrixHandler handler = new XmlMatrixHandler();
string attrValue = handler.FindDiagonalAttributeValue(doc, "AttrName22");
Console.WriteLine($"属性值:{attrValue}");

内容的提问来源于stack exchange,提问作者Douar Gwenn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:11:07