XML, Помогите устранить error

Vova_1805
Дата: 08.04.2014 15:57:39
XML, Помогите устранить error
Среда Visual Basic STUDIO’2010 Professional

Private Sub XmlIntoAlllTextBoxToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles XmlIntoAlllTextBoxToolStripMenuItem.Click

Dim doc4 As New XmlDocument()
        doc4.Load("test4.xml")
        Dim firstCD As XmlElement = DirectCast(doc4.DocumentElement.FirstChild, XmlElement)
        Dim artist As XmlElement = DirectCast(firstCD.GetElementsByTagName("artist")(0), XmlElement)
        Dim title As XmlElement = DirectCast(firstCD.GetElementsByTagName("title")(0), XmlElement)
        Console.WriteLine("Artist={0}, Title={1}", artist.InnerText, title.InnerText)
        ' вышестоящая строка приводит к error:
[color=red][b]' Ссылка на объект не указывает на экземпляр объекта. – [/b][/color]
    End Sub

test4.xml имеет вид:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="orders.xsl"?>

<order id="ord123456">
  <customer id="cust0921">
    <first-name>Dare</first-name>
    <last-name>Obasanjo</last-name>
    <address>
      <street>One Microsoft Way</street>
      <city>Redmond</city>
      <state>WA</state>
      <zip>98052</zip>
    </address>
  </customer>
  <items>
    <compact-disc>
      <price>16.95</price>
      <artist>Nelly</artist>
      <title>Nellyville</title>
    </compact-disc>
    <compact-disc>
      <price>17.55</price>
       <artist>Baby D</artist>
       <title>Lil Chopper Toy</title>
    </compact-disc>
  </items>
</order>

Спасибо.
bazile
Дата: 08.04.2014 16:13:38
Vova_1805, свойство DocumentElement ссылается на корневой элемент (order). DocumentElement.FirstChild соотвественно ссылается на элемент customer. Далее ты пытаешься найти элементы artist и title внутри customer. Таких элементов там нет. Отсюда и NullReferenceException.

Чтобы исправить ищем элементы внутри items или внутри документа:
doc4.Load("d:\test4.xml")
Dim itemsNode As XmlElement = DirectCast(doc4.GetElementsByTagName("items")(0), XmlElement)
Dim artist As XmlElement = DirectCast(itemsNode.GetElementsByTagName("artist")(0), XmlElement)
Dim title As XmlElement = DirectCast(itemsNode.GetElementsByTagName("title")(0), XmlElement)


doc4.Load("d:\test4.xml")
Dim artist As XmlElement = DirectCast(doc4.GetElementsByTagName("artist")(0), XmlElement)
Dim title As XmlElement = DirectCast(doc4.GetElementsByTagName("title")(0), XmlElement)
Vova_1805
Дата: 09.04.2014 14:47:07
bazile,
ОК,
Согласно Вашему решению оба варианта
Выводят одно и то же:

Artist=Nelly, Title=Nellyville
Artist=Nelly, Title=Nellyville

Как в цикле извлечь элементы всех узлов, их 2, последний:
Artist= Baby D, Title= Lil Chopper Toy

<items>
    <compact-disc>
      <price>16.95</price>
      <artist>Nelly</artist>
      <title>Nellyville</title>
    </compact-disc>
    <compact-disc>
      <price>17.55</price>
       [color=red]<artist>Baby D</artist>
       <title>Lil Chopper Toy</title>[/color]
    </compact-disc>
  </items>


Спасибо
bazile
Дата: 09.04.2014 15:00:00
Vova_1805, сделать цикл по списку который возвращает функция GetElementsByTagName()