2012-11-08 32 views
4

您好我有以下問題......請你幫助,因爲我很新在C#中,沒有編程經驗的編程...的XElement迭代並將其添加到父

在我的代碼,我猜想通過在的XElement XML文件迭代是的XElement添加到被稱爲能力的父母....這是我的代碼...

if (xElem.HasElements) 
     { 

      foreach (XElement xChild in xElem.Element("Elements")) 
      { 
       Capability capChild = Parse(xChild); 
       capParent.Children.Add(capChild); 
      } 
     } 

這裏的foreach循環給出錯誤

錯誤32的foreach語句不能在vari上運行類型ABLES「System.Xml.Linq.XElement」,因爲「System.Xml.Linq.XElement」不包含「的GetEnumerator」一個公共定義........

我怎麼可以隨身攜帶找出XElement是否有任何孩子並將其添加到父級能力的功能?

回答

4

首先修復,添加一個 's':

//foreach (XElement xChild in xElem.Element("Elements")) 
    foreach (XElement xChild in xElem.Elements("Elements")) 

這是假定有1個或多個標籤<Elements>在xElem在你的XML。

2

亨克的答案應該工作,但我個人會用

foreach (XElement xChild in xElem.Descendants()) 

其中xElem就等於你想爲所有子元素的父元素。或者你也可以使用LINQ查詢到基本完成相同的任務

var children = 
     from xChild in xElem.Descendants() 
     select Parse(xChild) 

應返回一個IEnumerable,你可以遍歷並添加方式。

編輯:

這也只是我明白了,你說你是新來的C#以前沒有編程經驗。我認爲你理解爲什麼會拋出這個錯誤也很重要。在C#中,爲了使用foreach循環,集合必須實現IEnumerable。這使得集合類型可以定義數據如何枚舉。 XElement不是可枚舉的,因爲它意味着代表單個元素,而不是元素的集合。因此,使用xElem.Element(「ElementName」)是爲了返回單個結果,而不是數組或集合。使用xElem.Elements(「ElementName」)將返回與XName匹配的所有XElements的集合。但是,如果您希望單個元素的所有子元素(不管名稱)如何,則這是xElem.Descendants()用於播放的位置。你使用哪一個取決於你需要什麼數據以及你如何添加數據。

+0

感謝很多Leon Leon的回答非常有幫助......嘿,其實我想從XML文檔中提取文件和文件夾的列表....這是我的XML文檔,看起來像...... <中processModel /> <雜項/> Brij123

+0

@Brijraj在這個例子中你想分析哪些數據?你需要從每個的所有數據嗎?更詳細地瞭解您試圖解析的信息以及您打算如何使用它,這將有助於我定義一個更好的示例和解釋。 –

相關問題