如何获取XmlNode的“真实”ChildNodes,忽略空白节点?

时间:2011-08-11 07:40:45

标签: c# .net xml

显然,XmlNode.ChildNodes-list(在C#.Net中)不仅包含真实的子节点,还包含特殊的空白节点。因此,即使在最简单的情况下,当在另一个标签内有一个标签时,您可以获得parentNode.ChildNodes.Count == 3.如何解决这个问题?

已经尝试过:

xmlDocument.PreserveWhitespace = false;

此外:

foreach(XmlNode node in xmlDocument.SelectNodes("//*))
  if (node is XmlWhitespace)
    node.ParentNode.RemoveChild(node);

3 个答案:

答案 0 :(得分:4)

文本节点是一流的孩子。我想你只想要Element节点。你不能吗

node.SelectNodes("*")

或者你是说<root><child></root>导致root有三个子节点?

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你可以做这样简单的事情。

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

这将仅过滤XmlElement类型的节点(意为“真实”节点)。它将排除CData,空格,文本等。

确保添加Linq命名空间:

using System.Linq;