2011-09-22 79 views
1

我通過this發帖子。如何通過linq訪問XML節點上的屬性?

我有這樣的XML:

<?xml version="1.0" encoding="utf-8" ?> 
    <Export version="" srcSys="" dstSys="" srcDatabase="" timeStamp=""> 

    </Export> 

這是我嘗試過,但沒有運氣:

var xml = XElement.Parse(BuyingModule.Properties.Resources.Export); 

Func<XElement, string, string> GetAttribute = (e, property) => e.Elements("property").Where(p => p.Attribute("name").Value == property).Single().Value; 

var query = from record in xml.Elements("Export") 
      select record; 

var prop = GetAttribute(query.FirstOrDefault(), "version"); 

如何訪問到 「導出」 節點的properties

我需要設置這些properties

回答

3

Export元素不一個properties元素,這是你的GetAttribute方法試圖找到。

我的猜測是,你實際上

var element = xml.Element("Export"); // Just get the first element 
var version = (string) element.Attribute("version"); 

爲什麼你使用的查詢表達式和委託這裏目前尚不清楚,我 - 這只是事情變得更加複雜比你的需要。但Attribute(XName)可能是你失蹤的......

+0

感謝您的幫助喬恩。看起來我不需要第一行tho('var element = xml.Element(「Export」);)'。我直接走了:'var version = xml.Attribute(「version」);' – Willem

+0

@Willem:啊 - 我認爲,因爲你在查詢中尋找'Export'元素,所以你實際分析過的XML有一個它上面的頂級元素... –