2011-08-11 23 views
1

顯然,XmlNode.ChildNodes-list(在C#.Net中)不僅包含真正的子節點,還包含特殊的空白節點。因此,即使在最簡單的情況下,當一個標籤在另一個標籤中時,您可以獲取parentNode.ChildNodes.Count == 3.如何解決此問題?如何獲得XmlNode的「真正的」ChildNodes,忽略空白節點?

已經嘗試過:

xmlDocument.PreserveWhitespace = false; 

另外:

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

回答

3

文本節點都是一流的兒童。我想你只需要Element節點。你就不能

node.SelectNodes("*") 

或者,你是說有三個子節點<root><child></root>導致根?

+0

是,的SelectNodes(「*」)的作品,但我還是莫名奇妙的childNodes數組是完全在.net中無法使用。爲什麼它退出... – AareP

+0

「無用」取決於您的需求。爲什麼不應該有辦法獲得元素的所有子節點,包括Text,Comment和PI節點? –

+0

我想應該有兩個數組,ChildNodes和AllChildNodes。默認列表不符合標籤列表(在xml中)沒有任何意義。 – AareP

0

爲什麼不只是使用以下?您將無法從父項中移除該節點,因爲那樣您在枚舉不允許的情況下正在修改該集合。

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

你可以做一些簡單的像這樣。

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

這將只篩選類型爲XmlElement(意爲「真實」節點)的節點。這將排除CDATA和空白,文字等

確保添加LINQ的命名空間:

using System.Linq;