いまさら聞けないXML〜VB.netでXMLを読む
- 2011.08.22 Monday
- 12:56
XMLの読み込みを頻繁に使うので、
自分がよく使うクラスを覚え書き
もっと効率のよい書き方があるかもしれません。
覚え書きなので、許してちょ
今回は、読み込みの方法
■データ例
[Test.xml]
<?xml version="1.0" encoding="utf-8"?>
<xRoot>
<xData dID="都道府県">
<xFuken kID="A1">
<xCode>T1</xCode>
<xName>東京</xName>
</xFuken>
<xFuken kID="A2">
<xCode>T2</xCode>
<xName>大阪</xName>
</xFuken>
<xFuken kID="A3">
<xCode>T3</xCode>
<xName>福岡</xName>
</xFuken>
</xData>
</xRoot>
※いまさら聞けないXML〜VB.netでXMLを書き出すで書き出し方法を覚え書きしています。
■ソース例
Dim xDocument As XmlDocument = New XmlDocument
Dim xRoot As XmlElement
Dim xDataList As XmlNodeList
Dim xFukenList As XmlNodeList
Dim xNameList As XmlNodeList
Call xDocument.Load("test.xml") 'XMLファイルをロード
xRoot = xDocument.DocumentElement 'XMLドキュメントからルート要素を取り出す
If xRoot IsNot Nothing Then
Call MessageBox.Show(xRoot.Name)
End If
xDataList = xRoot.GetElementsByTagName("xData") 'ルート要素から親リストを取得する
Call MessageBox.Show(String.Format("データあり : {0}個", xDataList.Count))
For Each xElement As XmlElement In xDataList '親リストから親要素を取り出す
xFukenList = xElement.GetElementsByTagName("xFuken") '親要素の中の子リストを取り出す
Call MessageBox.Show(String.Format("府県あり : {0}個", xFukenList.Count))
For Each xFuken As XmlElement In xFukenList '子リストから子要素を取り出す
Call MessageBox.Show(xFuken.SelectSingleNode("@kID").Value) '子要素の属性を読み取る
xNameList = xFuken.GetElementsByTagName("xName") '子要素から孫リストを取り出す
Call MessageBox.Show(String.Format("府県名あり : {0}個", xNameList.Count))
For Each xName As XmlElement In xNameList '孫リストから孫要素を取り出す
Call MessageBox.Show(xName.FirstChild.Value) '孫要素の値を取得する。
'FirstChildを使っているが、複数ある場合はForループで取得していく
Next xName
Next xFuken
Next xElement
コードを見てもらうと分かるように、
ロードした後は、親→子→孫→・・・とリストと要素を繰り返して取り出して、
その中にある必要なデータを取り出していく感じになる。
(親→孫という感じでダイレクトに取得も可能、ただし、別の子要素に同じ要素の孫がある場合、すべて取得してしまうので、子要素毎に読み出した方が良い場合もある)
要素内のデータを取り出すときは、”要素名”
要素の属性を取り出すときは、”@属性名” (半角@がないとエラーが出てしまう)
で取得できる。
これさえ分かれば、無理矢理ではあるけれどもXMLを読めるようにはなる
(応用すればiniファイルのようなXMLファイルも作れる)
上のソースはデータに要素がないとエラーを起こすこともあるので、
If xDataList IsNot Nothing Then とか、
If xName.FirstChild.Value IsNot Nothing Then とか
など細かいチューニングは必要。
その辺はやってみていくうちに分かってきます。
■参考
HIRO's.NET
http://hiros-dot.net/VBNET2005/XMLMenu.htm
関連投稿
いまさら聞けないXML〜VB.netでXMLをシリアライズして保存してみる
いまさら聞けないXML〜VB.netでXMLをデシリアライズしてXMLを読む
いまさら聞けないXML〜VB.netでXMLを書き出す
いまさらJSONしてみる〜VB2008でJSON形式を使う
いまさらJSONしてみる〜クラスや構造体をJSONしてみる
いまさらJSONしてみる〜配列を作ってみる。
いまさらJSONしてみる〜難読化とクラスのデシリアライズ
オブジェクト型をどうにかキャストしてみる〜objectな配列を取り出す
自分がよく使うクラスを覚え書き
もっと効率のよい書き方があるかもしれません。
覚え書きなので、許してちょ
今回は、読み込みの方法
■データ例
[Test.xml]
<?xml version="1.0" encoding="utf-8"?>
<xRoot>
<xData dID="都道府県">
<xFuken kID="A1">
<xCode>T1</xCode>
<xName>東京</xName>
</xFuken>
<xFuken kID="A2">
<xCode>T2</xCode>
<xName>大阪</xName>
</xFuken>
<xFuken kID="A3">
<xCode>T3</xCode>
<xName>福岡</xName>
</xFuken>
</xData>
</xRoot>
※いまさら聞けないXML〜VB.netでXMLを書き出すで書き出し方法を覚え書きしています。
■ソース例
Dim xDocument As XmlDocument = New XmlDocument
Dim xRoot As XmlElement
Dim xDataList As XmlNodeList
Dim xFukenList As XmlNodeList
Dim xNameList As XmlNodeList
Call xDocument.Load("test.xml") 'XMLファイルをロード
xRoot = xDocument.DocumentElement 'XMLドキュメントからルート要素を取り出す
If xRoot IsNot Nothing Then
Call MessageBox.Show(xRoot.Name)
End If
xDataList = xRoot.GetElementsByTagName("xData") 'ルート要素から親リストを取得する
Call MessageBox.Show(String.Format("データあり : {0}個", xDataList.Count))
For Each xElement As XmlElement In xDataList '親リストから親要素を取り出す
xFukenList = xElement.GetElementsByTagName("xFuken") '親要素の中の子リストを取り出す
Call MessageBox.Show(String.Format("府県あり : {0}個", xFukenList.Count))
For Each xFuken As XmlElement In xFukenList '子リストから子要素を取り出す
Call MessageBox.Show(xFuken.SelectSingleNode("@kID").Value) '子要素の属性を読み取る
xNameList = xFuken.GetElementsByTagName("xName") '子要素から孫リストを取り出す
Call MessageBox.Show(String.Format("府県名あり : {0}個", xNameList.Count))
For Each xName As XmlElement In xNameList '孫リストから孫要素を取り出す
Call MessageBox.Show(xName.FirstChild.Value) '孫要素の値を取得する。
'FirstChildを使っているが、複数ある場合はForループで取得していく
Next xName
Next xFuken
Next xElement
コードを見てもらうと分かるように、
ロードした後は、親→子→孫→・・・とリストと要素を繰り返して取り出して、
その中にある必要なデータを取り出していく感じになる。
(親→孫という感じでダイレクトに取得も可能、ただし、別の子要素に同じ要素の孫がある場合、すべて取得してしまうので、子要素毎に読み出した方が良い場合もある)
要素内のデータを取り出すときは、”要素名”
要素の属性を取り出すときは、”@属性名” (半角@がないとエラーが出てしまう)
で取得できる。
これさえ分かれば、無理矢理ではあるけれどもXMLを読めるようにはなる
(応用すればiniファイルのようなXMLファイルも作れる)
上のソースはデータに要素がないとエラーを起こすこともあるので、
If xDataList IsNot Nothing Then とか、
If xName.FirstChild.Value IsNot Nothing Then とか
など細かいチューニングは必要。
その辺はやってみていくうちに分かってきます。
■参考
HIRO's.NET
http://hiros-dot.net/VBNET2005/XMLMenu.htm
関連投稿
いまさら聞けないXML〜VB.netでXMLをシリアライズして保存してみる
いまさら聞けないXML〜VB.netでXMLをデシリアライズしてXMLを読む
いまさら聞けないXML〜VB.netでXMLを書き出す
いまさらJSONしてみる〜VB2008でJSON形式を使う
いまさらJSONしてみる〜クラスや構造体をJSONしてみる
いまさらJSONしてみる〜配列を作ってみる。
いまさらJSONしてみる〜難読化とクラスのデシリアライズ
オブジェクト型をどうにかキャストしてみる〜objectな配列を取り出す