2011-09-22 82 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有一个它上面的顶级元素... –