Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得;“真正的”;XmlNode的子节点,是否忽略空白节点?_C#_.net_Xml - Fatal编程技术网

C# 如何获得;“真正的”;XmlNode的子节点,是否忽略空白节点?

C# 如何获得;“真正的”;XmlNode的子节点,是否忽略空白节点?,c#,.net,xml,C#,.net,Xml,显然,XmlNode.ChildNodes-list(在C#.Net中)不仅包含真正的子节点,还包含特殊的空白节点。因此,即使在最简单的情况下,当一个标记位于另一个标记内时,也可以得到parentNode.ChildNodes.Count==3。如何避开这个问题 已尝试: xmlDocument.PreserveWhitespace = false; 此外: 文本节点是第一类子节点。我猜您只需要元素节点。你不能吗 node.SelectNodes("*") 或者你是说会导致root有三个子节

显然,XmlNode.ChildNodes-list(在C#.Net中)不仅包含真正的子节点,还包含特殊的空白节点。因此,即使在最简单的情况下,当一个标记位于另一个标记内时,也可以得到parentNode.ChildNodes.Count==3。如何避开这个问题

已尝试:

xmlDocument.PreserveWhitespace = false;
此外:


文本节点是第一类子节点。我猜您只需要元素节点。你不能吗

node.SelectNodes("*")

或者你是说
会导致root有三个子节点?

为什么不使用下面的方法呢?您将无法从父节点中删除节点,因为在枚举时您正在修改集合,这是不允许的

foreach(XmlNode node in xmlDocument.SelectNodes("//*"))
{
  if (node is XmlWhitespace)
    continue;
  else
  {
     // A real node
  }
}

你可以做一些像这样简单的事情

xmlDocument.SelectNodes("//*).OfType<XmlElement>();

是的,SelectNodes(“*”)可以工作,但我仍然对ChildNodes数组在.net中完全不可用感到困惑。“无用”取决于你的需要。为什么不应该有一种方法来获取元素的所有子节点,包括文本、注释和PI节点?我想应该有两个数组,ChildNodes和AllChildNodes。默认列表与标记列表(xml)不对应是没有意义的。
xmlDocument.SelectNodes("//*).OfType<XmlElement>();
using System.Linq;