2016-07-07 99 views
1

我的代碼:讀取XML屬性C#

string today = "url"; 
     var xmldoc = new XmlDocument(); 
     xmldoc.Load(today); 

     XmlNodeList xnList = xmldoc.SelectNodes("cityinfo"); 

     foreach (XmlNode xn in xnList) 
     { 
      PrayerTimes pt = new PrayerTimes(); 
      pt.day = xn.Attributes["day"].Value; 
      prayertimes.Add(pt); 
     } 

     foreach (XmlNode v in xnList) 
     { 
      listBox1.Items.Add(v); 
     } 

我的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<cityinfo ID="1425" countryID="14" cityNameTR="Bakü (Bakı)" cityNameEN="Baku (Baki)" cityStateTR="Azerbaycan Cumhuriyeti" cityStateEN="Central Division" arzDer="40" arzDak="26" arzYon="N" tulDer="49" tulDak="52" tulYon="E" STulDer="60" STulDak="0" STulYon="E" tchange="1" height="250" scale="6" summerStart="87" summerEnd="304" qiblaangle="207.15" magdeg="6.11"> 
    <prayertimes dayofyear="0" day="31" month="12">6:10 6:26 7:58 8:49 12:34 12:53 15:15 15:52 16:46 17:30 18:26 19:05 19:16 14:33 a b </prayertimes> 
    <prayertimes dayofyear="1" day="1" month="1">6:11 6:26 7:58 8:49 12:34 12:53 15:16 15:53 16:47 17:30 18:26 19:06 19:17 14:34 a b </prayertimes> 

錯誤:未設置爲一個對象的實例對象引用。

+0

我想讀的所有屬性 –

回答

0

我寧願XDocument。您可以訪問值和屬性是這樣的:

XDocument doc = XDocument.Load(today); // XDocument.Load("url"); 
XElement cityinfo = doc.Element("cityinfo"); 
foreach (XElement el in cityinfo.Elements()) 
{ 
    PrayerTimes pt = new PrayerTimes(); 
    pt.day = el.Attribute(XName.Get("day")).Value; 
    prayertimes.Add(pt); 
} 
+0

你也可以說,它應該只能通過「prayertimes」用foreach循環節點(EL的XElement在cityinfo.Elements(「prayertimes」)) – c0d3b34n

+0

是工作謝謝來自阿塞拜疆:) –

0

cityinfo沒有名爲「day」的屬性,因此您將獲得NullReferenceException

xn.ChildNodes將爲您提供cityinfo節點的所有子節點。

0
var xmldoc = new XmlDocument(); 
xmldoc.Load("url"); 

var xnlist = XElement.Parse(xmldoc.InnerXml); 
foreach (var xn in xnlist.Elements()) 
{ 
    PrayerTimes pt = new PrayerTimes(); 
    pt.day = xn.Attribute("day").Value; 
    prayertimes.Add(pt); 
} 

您還可以使用XML的LINQ實現這一目標。