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

为何IXmlNode的ChildNodes返回含空白值的XmlNodeList?

为什么ChildNodes会返回包含空白节点的NodeList?

这是个XML解析里超常见的小坑!原因其实很直白:你所用的XML解析器默认会把XML元素之间的空白文本节点也纳入ChildNodes的返回结果里。

先看你给出的XML内容:

<?xml version="1.0" encoding="UTF-8"?> 
<Service> 
  <Name Value="122" ValueType="string"/> 
  <Number Value="1222" ValueType="long"/> 
  <ApplicationName Value="Service" ValueType="string"/> 
  <Count Value="10" ValueType="long"/> 
</Service>

里面<Service>和第一个<Name>之间的换行、空格,<Name>与<Number>之间的换行空格……这些在XML规范里都属于文本节点(只是内容全是空白字符),解析器会把它们当作合法的子节点保留下来。

你可以数一下:

  • <Service>后的空白节点(1)
  • <Name>元素节点(2)
  • <Name>后的空白节点(3)
  • <Number>元素节点(4)
  • <Number>后的空白节点(5)
  • <ApplicationName>元素节点(6)
  • <ApplicationName>后的空白节点(7)
  • <Count>元素节点(8)
  • <Count>后的空白节点(9)
    刚好是9个节点,和你看到的结果完全对应。

解决办法

这里给你几个实用的处理方案:

  • 用XPath筛选元素节点:直接调用SelectNodes方法配合XPath表达式"*",比如Node.SelectNodes("*"),这样只会返回<Name>、<Number>这类元素节点,自动忽略空白文本节点。
  • 修改解析器的空白保留设置:如果用的是XmlDocument,可以把PreserveWhitespace设为false,解析时就会自动跳过元素间的空白节点。代码示例:
    XmlDocument doc = new XmlDocument();
    doc.PreserveWhitespace = false;
    doc.Load("你的XML文件路径");
    
  • 手动过滤节点:遍历ChildNodes时,只保留节点类型为XmlNodeType.Element的项。示例代码:
    var targetNodes = Node.ChildNodes.Cast<XmlNode>()
                            .Where(node => node.NodeType == XmlNodeType.Element)
                            .ToList();
    

这样就能精准得到你需要的4个实际元素节点了!

内容的提问来源于stack exchange,提问作者Roshmi Benny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:04:21