如何获取XML指定元素?XmlDocument获取Info/Result/ID失败求助
问题原因
GetElementsByTagName方法仅能接收单个标签名称作为参数,无法识别Info/Result/ID这种层级路径表达式。它会尝试查找所有名为Info/Result/ID的标签(显然不存在),而非定位到Info下Result节点内的ID元素,因此返回空节点列表。
解决方案
以下是三种可行的解决方式,按需选择:
1. 使用XmlDocument的XPath查询(直接路径定位)
利用SelectNodes方法传入XPath路径,直接定位目标节点:
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("myFile.xml"); XmlNodeList myList = xmlDoc.SelectNodes("/Info/Result/ID"); int totalCount = myList.Count; // 后续业务逻辑
- 路径
/Info/Result/ID是绝对路径,会从根节点开始匹配Info下的Result节点,再获取其中的ID元素。
2. 分步获取节点(逐层遍历)
如果需要对中间节点做额外处理,可以逐层查找:
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("myFile.xml"); // 先找到根Info节点 XmlNode infoNode = xmlDoc.SelectSingleNode("Info"); if (infoNode != null) { // 再找Info下的Result节点 XmlNode resultNode = infoNode.SelectSingleNode("Result"); if (resultNode != null) { // 最后获取Result下的所有ID节点 XmlNodeList idNodes = resultNode.GetElementsByTagName("ID"); int totalCount = idNodes.Count; // 后续业务逻辑 } }
3. 使用LINQ to XML(现代简洁方案,推荐)
如果项目支持.NET Framework 3.5及以上(或.NET Core/.NET 5+),推荐使用XDocument的LINQ查询,代码更简洁易读:
XDocument xDoc = XDocument.Load("myFile.xml"); // 链式调用定位节点 int totalCount = xDoc.Descendants("Info") .Elements("Result") .Elements("ID") .Count(); // 也可以用XPath方式 int countViaXPath = xDoc.XPathSelectElements("/Info/Result/ID").Count();
内容的提问来源于stack exchange,提问作者navi
相关产品推荐
相关产品推荐

