2011-05-26 33 views
3

我有兩個變量XResult,類型爲XElement的Xtemp。XNode和XElement之間沒有隱式轉換

我想從Xtemp中提取所有<vehicle>元素,並將它們添加到Xresult的<vehicles>下。

看來在Xtemp有時<vehicle>將出現在<vehicles>下,有時它會自己。

XResult.Descendants(xmlns + "Vehicles").FirstOrDefault().Add(
    XTemp.Descendants(xmlns + "Vehicles").Nodes().Count() > 0 
    ? XTemp.Descendants(xmlns + "Vehicles").Nodes() 
    : (XTemp.Descendants(xmlns + "SearchDataset").FirstOrDefault().Descendants(xmlns + "Vehicle")));

在上面的代碼我使用的三元運算符,以檢查是否有<vehicles>孩子的然後讓所有的人都去別的得到所有<vehicle>元素。

這將產生錯誤:System.Collections.Generic.IEnumerable<System.Xml.Linq.XNode>System.Collections.Generic.IEnumerable <System.Xml.Linq.XElement>

之間不存在隱式的轉換有些機構可以幫我糾正。 在此先感謝。 BB。

回答

2

在三元組中,您需要決定是使用Nodes()還是Descendants()。你不能擁有兩個。 Nodes()返回IEnumerable<XNode>Descendants()返回IEnumerable<XElement>。三元表達式需要返回相同的類型。

變化:

XTemp.Descendants(xmlns + "Vehicles").Nodes() 

到:

XTemp.Descendants(xmlns + "Vehicles").Nodes() 

或者你可以添加Nodes()到第二個表達式。

編輯:如果我正確理解你的評論,你想選擇每個車輛的節點和自身。代替Descendants(xmlns + "Vehicle")試試這個:

.Descendants(xmlns + "Vehicle") 
.SelectMany(d => d.DescendantNodesAndSelf().Take(1)) 

Take(1)將讓您抓住了整個車節點,而忽略所有屬於它的其他節點,因爲我不認爲你想那些被重複做。

+0

謝謝。如果我將節點添加到第二個表達式.Descendants(xmlns +「Vehicle」).Nodes,那麼我會得到下的所有子節點,但我想提取及其子節點。 – BumbleBee 2011-05-26 18:29:31

+0

@BumbleBee看到我的編輯。如果這不能解決您的問題,請更新您的原始問題,並在代碼中顯示XML的簡短示例,並顯示您的預期結果。 – 2011-05-26 18:50:58

相關問題