2014-01-21 3 views
0

Я пытаюсь ознакомиться с разбором XML-документа с C#. Мой файл XML выглядит следующим образом:Исключение Null Reference при разборе этого XML (включая код C#)

<title> 
    <titledata titletype="standard"> 
    <currentid>18097</currentid> 
    </titledata> 
    <resourcedata> 
    <resource id="36" resourcetype="image"> 
     <name>nextBtn.gif</name> 
     <relativelink>images/nextBtn.gif</relativelink> 
     <resourceflags>0</resourceflags> 
     <lastupdated>1367612131</lastupdated> 
    </resource> 
    <resource id="37" resourcetype="image"> 
     <name>nextOver.gif</name> 
     <relativelink>images/nextOver.gif</relativelink> 
     <resourceflags>0</resourceflags> 
     <lastupdated>1367612131</lastupdated> 
    </resource> 
    <resource id="38" resourcetype="image"> 
     <name>nextDown.gif</name> 
     <relativelink>images/nextDown.gif</relativelink> 
     <resourceflags>0</resourceflags> 
     <lastupdated>1367612131</lastupdated> 
    </resource> 
    <resourcedata> 
</title> 

Мой код выглядит следующим образом:

private void button1_Click(object sender, EventArgs e) 
    { 
     var ofd = new OpenFileDialog { Filter = "XML|*.xml" }; 
     if (ofd.ShowDialog() != DialogResult.OK) return; 

     var xdoc = XDocument.Load(ofd.FileName); 

     foreach (var element in xdoc.Descendants("resourcedata")) 
     { 
      var id = Convert.ToInt32(element.Attribute("id").Value); 
      var resourceType = element.Attribute("resourcetype").Value; 
      var name = element.Element("name").Value; 
      var relativeLink = element.Element("relativeLink").Value; 
      var resourceFlag = Convert.ToInt32(element.Element("resourcetype").Value); 
      var lastUpdated = Convert.ToInt32(element.Element("lastupdated").Value); 
      resourceFlag, lastUpdated); 

      textBox1.Text += "ID: " + id + "\r\n"; 
      textBox1.Text += "Resource Type: " + resourceType + "\r\n"; 
      textBox1.Text += "Name: " + name + "\r\n"; 
      textBox1.Text += "Relative Link: " + relativeLink + "\r\n"; 
      textBox1.Text += "Resource Flag: " + resourceFlag + "\r\n"; 
      textBox1.Text += "Last Updated: " + lastUpdated + "\r\n"; 

     } 
    } 

Ошибка я получаю "Null Reference Exception" на следующей строке:

var id = Convert.ToInt32(element.Attribute("id").Value); 

Это почти как я пытаюсь получить доступ к неправильному элементу в этой точке, потому что кажется, что атрибут id не существует. Если это так, что мне нужно сделать, чтобы исправить мой код? Я просто хочу распечатать информацию для каждого ресурса в файле XML.

ответ

3

Изменить foreach источник:

foreach (var element in xdoc.Descendants("resourcedata").Elements("resource")) 

В противном случае вы Перебор <resourcedata> элементы, которые не имеют атрибут с именем id.

PS. Если файл выглядит, как вы показали нам, вы можете попробовать следующее, а также:

foreach (var element in xdoc.Root.Element("resourcedata").Elements("resource")) 

Должно быть немного быстрее, чем при использовании Descendants.

+0

Ах, ха! Отсутствующий кусок. Вы его нашли! Спасибо! Как только таймер закончится, я отвечу. Я приветствую вашу помощь! – Kevin

Смежные вопросы