如何用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
相关产品推荐
相关产品推荐

