2014-11-29 3 views
0

많은 시도를 해봤으며 많은 독해와 연구를했습니다. 이 마지막 코드는 마침내 내 XML 파일을 읽고 내 XML 파일에서 올바른 줄 수를 얻었습니다. 그러나, 나는 사전 입력 변수 안에 뭐가 널 값XML 파일에서 속성을 읽지 못했습니다.

이 내 코드되어 있습니다 :

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

Lot은 요소이지만 name, timeIntimeout은 속성입니다.

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

그런 이유로 요소에서 Attributes 메서드를 사용해야합니다.

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

주셔서 감사 솔루션했다. –

+0

가 발생이 광고 'defaultPage.ParkingStatus.Add (iterate.Key.ToString() statusParking)의 또 다른 문제,' 사전에 부가 된 키 값을 디버깅이 "System.Xml.Linq.XElement이다 + < GetAttributes> d_0 "012", "W101", "W102"등으로 가정하면 입니다. tempDict에서 키 값이 정확합니다. 따라서 동일한 중복 키가 삽입 된 오류가 발생합니다. –

2

임시 사전에 대한 필요가 없습니다 :

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

    ... 
} 
관련 문제