如何使用C#遍历XElement节点并比较节点值
C#遍历XElement节点并比较值的实现方案
没问题,我来帮你实现这个需求。首先我们要用到System.Xml.Linq命名空间下的类来处理XML,下面是完整的代码示例和步骤说明:
首先,先看完整的可运行代码:
using System; using System.Xml.Linq; class EmployeeComparison { static void Main() { // 加载你的XML内容,这里直接用字符串构造,也可以从文件加载 string xmlData = @"<Information> <Emp> <A.EMPLID>1</A.EMPLID> <A.Phone>12##</A.Phone> </Emp> <Emp_Add> <B.ID>125</B.ID> <Add>XXXXXXX</Add> </Emp_Add> <Emp_Add> <B.ID>1256</B.ID> <Add>ZZZZZZ</Add> </Emp_Add> </Information>"; // 解析XML为XElement对象 XElement infoRoot = XElement.Parse(xmlData); // 获取<Emp>节点下的<A.EMPLID>值,用空条件运算符避免空引用 string emplIdStr = infoRoot.Element("Emp")?.Element("A.EMPLID")?.Value; // 先校验<A.EMPLID>是否有效(如果是数值类型的话) if (!int.TryParse(emplIdStr, out int emplId)) { Console.WriteLine("Error: <A.EMPLID>的值不是有效的整数"); return; } // 遍历所有<Emp_Add>节点 foreach (XElement empAddNode in infoRoot.Elements("Emp_Add")) { // 获取当前<Emp_Add>下的<B.ID>值 string bIdStr = empAddNode.Element("B.ID")?.Value; // 校验<B.ID>的有效性 if (int.TryParse(bIdStr, out int bId)) { // 比较两个数值 if (bId == emplId) { Console.WriteLine("Values matched"); } else { Console.WriteLine("Values does not match"); } } else { Console.WriteLine($"Warning: 当前<Emp_Add>节点的<B.ID>值({bIdStr})无效"); } } } }
关键步骤说明:
- XML加载与解析:用
XElement.Parse()解析字符串形式的XML,如果是从文件读取,替换成XElement.Load("your-file-path.xml")即可。 - 空值安全处理:使用
?.空条件运算符,防止XML节点缺失时抛出空引用异常,这在实际业务场景中非常实用。 - 值的比较方式:这里用了数值比较(转换成int),因为你的示例中都是数字类型的值,这样能避免字符串比较时的前导零、空格等问题;如果你的业务场景需要字符串精确匹配,直接用
string.Equals(emplIdStr, bIdStr, StringComparison.Ordinal)即可。 - 遍历节点:通过
infoRoot.Elements("Emp_Add")直接获取根节点下所有的<Emp_Add>子节点,要是<Emp_Add>嵌套在更深层级,可以改用infoRoot.Descendants("Emp_Add")来查找所有匹配的节点。
运行这段代码后,会逐个遍历<Emp_Add>节点,输出对应的匹配结果。
内容的提问来源于stack exchange,提问作者user2897967
相关产品推荐
相关产品推荐

