显然,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);
答案 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;