在c#中从xml获取属性值

时间:2013-12-23 17:17:55

标签: c# xml linq

我有一个LINQ表达式,它从xml文件中获取XML属性值。

 var xml = XElement.Load(@"C:\\StoreServer1.xml");
 var query = from e in xml.Descendants("Groups")
             where int.Parse(e.Element("Store").Value) == 1500
             select e.Element("Store").Attribute("WeekDayStClose").Value;

xml文件是:

enter<?xml version="1.0" encoding="utf-8" ?>
<Stores>
    <Groups Range="000"> 
        <Store WeekDayStClose="210" SatStClose="21" SunStClose="22">1500</Store>
        <Store WeekDayStClose="23" SatStClose="24" SunStClose="25">18</Store>
        <Store WeekDayStClose="23" SatStClose="24" SunStClose="25">19</Store>
    </Groups> 
</Stores>

我只获取1500的第一个元素的属性result(value)。如果我搜索18的同一个东西,它不返回任何结果,也没有异常。任何帮助表示赞赏.... Plz帮助!!!

3 个答案:

答案 0 :(得分:1)

您应该更精细,使用Descendants(XName)调用子Store

    var xml = XElement.Load(@"C:\\New Folder\\StoreServer1.xml");
    var query = from e in xml.Descendants("Groups").Descendants("Store")
                where int.Parse(e.Value) == 18
                select e.Attribute("WeekDayStClose").Value;

因为现在您只检索Store的每个Group 第一个 1500

答案 1 :(得分:1)

试试这个: -

var xml = XElement.Load(@"C:\\StoreServer1.xml");
var query = xml.Descendants("Groups").Descendants("Store").Where(e => int.Parse(e.Value) == 18).Select(e=> e.Attribute("WeekDayStClose").Value);

答案 2 :(得分:0)

是的,您的代码中有一点错误: 您正在将xml拆分为组元素(您只有一个组)。然后检查第一个store元素是否具有值1500(您没有检查以下存储元素是否具有值1500)

您需要将代码更改为以下

        var query = from e in xml.Descendants("Store")
                    where int.Parse(e.Value) == 1500
                    select e.Attribute("WeekDayStClose").Value;