无法从XML文件中读取属性

时间:2014-11-29 15:52:53

标签: c# xml linq dictionary

我尝试了很多尝试并做了大量的阅读和研究。最后的代码最终读取了我的XML文件,并在我的XML文件中获得了正确的行数。但是,我在字典类型变量中得到的是Null值

这是我的代码:

public void ParkingStatus()
{
    _Default defaultPage = new _Default();

    //baca dari XML file
    XDocument xmlDocReader = XDocument.Load(@".\carpark.xml");

    var tempDict = xmlDocReader.Root.Elements("Lot")
        .ToDictionary(c => c.Elements("name"), c => c.Elements("timeOut"));

    foreach (var iterate in tempDict)
    {
        bool statusParking;
        if (iterate.Value.ToString() == "")
            statusParking = true;
        else
            statusParking = false;

        defaultPage.ParkingStatus.Add(iterate.Key.ToString(), statusParking);
    }
}      

我的XML文件如下:(carpark.xml)

<?xml version="1.0" encoding="UTF-8"?>

<Lot>
     <Lot name="W101" timeIn="2014-11-23 13:22" timeOut="" />
     <Lot name="W102" timeIn="" timeOut="2014-11-23 13:35" />
     <Lot name="W103" timeIn="" timeOut="2014-11-23 11:35" />
     <Lot name="W104" timeIn="2014-11-23 13:35" timeOut="" />
     <Lot name="W105" timeIn="2014-11-23 08:00" timeOut="" />
     <Lot name="W106" timeIn="2014-11-23 07:56" timeOut="" />
     <Lot name="W107" timeIn="" timeOut="2014-11-23 13:15" />
     <Lot name="W108" timeIn="2014-11-23 07:35" timeOut="" />
     <Lot name="W109" timeIn="" timeOut="2014-11-23 12:55" />
     <Lot name="W110" timeIn="2014-11-23 09:00" timeOut="" />
     <Lot name="W111" timeIn="" timeOut="2014-11-23 12:45" />
     <Lot name="W112" timeIn="" timeOut="2014-11-23 13:01" />
</Lot>

我做错了什么?

2 个答案:

答案 0 :(得分:2)

Lot是一个元素,但nametimeIntimeout是属性。

<Lot name="W102" timeIn="" timeOut="2014-11-23 13:35" />

因此,您应该在Element上使用Attributes方法。

 var tempDict = xmlDocReader.Root.Elements("Lot")
        .ToDictionary(c => c.Attributes("name").FirstOrDefault(), 
                      c => c.Attributes("timeOut").FirstOrDefault());

答案 1 :(得分:2)

不需要临时字典:

foreach (var el in xmlDocReader.Root.Elements("Lot"))
{
    string name = (string)el.Attribute("name");
    string timeOut = (string)el.Attribute("timeOut");

    ...
}