2016-07-07 1 views
1

Мой код:Чтение 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> 

ОШИБКА: ссылка на объект не указывает на экземпляр объекта.

+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 в cityinfo.Elements («prayertimes»)) – c0d3b34n

+0

да работало спасибо из Азербайджана :) –

0

cityinfo не имеет атрибута «день», таким образом, вы получаете 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 для достижения этой цели.