2016-07-07 9 views
1

私のコードはc:読むXMLは属性#

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> 

ERROR:オブジェクトのインスタンスに設定されていないオブジェクト参照。

+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

foreach(XElement el in cityinfo.Elements( "prayertimes"))を使用して "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を使用することができます。