• ベストアンサー

xmlの値を配列に格納したいんですけどエラーがでてしまう。

<?xml version="1.0" encoding="UTF-8" ?> <Dataroot> <aaa> <bbb> <ccc>値1</ccc> </bbb> <bbb> <ccc>値2</ccc> </bbb> </aaa> </Dataroot> ---------------------------------------------------------------- のようなXML文書がある時<ccc></ccc>の値を取り出す場合 ---------------------------------------------------------------- Imports System Imports System.IO Imports System.Xml public class Sample public shared sub Main() Dim doc as XmlDocument = new XmlDocument() doc.Load("data.xml") 'XML文書の読み込み Dim root as XmlElement = doc.DocumentElement Dim nodeList as XmlNodeList nodeList = root.SelectNodes("/Dataroot/aaa/bbb")'/cccまでやる方が簡単 Dim node as XmlNode Dim ccclist() As String = Nothing for each node in nodeList ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し next end sub end class としているのですが ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し この行で オブジェクト参照がオブジェクト インスタンスに設定されていません。 とエラーがでて困っています。 これはどのように修正すればよろしいでしょうか? 教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>foreachで配列を作成する場合、 こういうのも何ですが、For eachを使わず素直にFor i as Integer = 0 to nodeList.count - 1をした方が良いと思います。っていうか方法が思いつきません。 >'/cccまでやる方が簡単 とコメントで述べられておられますように/cccをしてしまうのが一番簡単だとも思いますし。 Imports System Imports System.IO Imports System.Xml public class Sample public shared sub Main() Dim doc as XmlDocument = new XmlDocument() doc.Load("data.xml") 'XML文書の読み込み Dim root as XmlElement = doc.DocumentElement Dim nodeList as XmlNodeList nodeList = root.SelectNodes("/Dataroot/aaa/bbb")'/cccまでやる方が簡単 Dim node as XmlNode Dim ccclist() As String Redim ccclist(nodeList.Count-1) for i as Integer = 0 to nodeList.count - 1 ccclist(i) = nodeList.Item(i).SelectSingleNode("ccc").InnerText '内容の取り出し next end sub end class #GetEnumeratorメソッドとかも面白そうではあるんだが http://msdn2.microsoft.com/ja-JP/library/system.xml.xmlnode.getenumerator.aspx

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>Dim ccclist() As String = Nothing 実際の配列が確保されていない。

回答No.1

ヒント0:doc.Load("data.xml") のファイルは存在しているのかな? ヒント1:配列の添え字がRedim等で決定されていない! ヒント2:ccclist(nodeList.Count) の添え字はnodeList.Countでいいのかな?

mixiho
質問者

お礼

ありがとうございます。 ファイルは存在しています。 添え字ですか・・・・やはりそこが問題ですね。 添え字の決定の仕方がわからないんですけど。 foreachで配列を作成する場合、どういう風に作成すればいいんですか?教えてください。

関連するQ&A