まったく個人的なプログラムに関するメモです

'DOMを格納するための変数の宣言
Dim xDoc As New System.Xml.XmlDocument
'複数のノードを格納できる変数
Dim nodes As Xml.XmlNodeList
'xmlの読み込み
xDoc.Load("C:\sample.xml")

'idが"id1"となっているElementを取得する
Dim item As Xml.XmlElement = xDoc.GetElementById("id1")

'"item"という名前のElementをすべて取得する
nodes = xDoc.GetElementsByTagName("item")
補足
GetElementById ではidが等しい一つのElementを取得してくるわけですが、評価対象はDTDまたはスキーマでIDと定義されている'ID'属性のみです。<br/>
要するにID定義をしないと全く使えないわけです。<br/>
ID定義…めんどくさい!! というわけでちょっと改良し
'DOMを格納するための変数の宣言
Dim xDoc As New System.Xml.XmlDocument
'複数のノードを格納できる変数
Dim nodes As Xml.XmlNodeList
'xmlの読み込み
xDoc.Load("C:\sample.xml")

'Xpath式を用いて"item"という名前のElementをすべて取得する
nodes = xDoc.DocumentElement.SelectNodes("//item")

'Xpath式を用いて"item"という名前のElementをすべて取得する
nodes = xDoc.DocumentElement.SelectNodes("//*[(@Id='id1')]")
Console.WriteLine(nodes.Count)
補足
SelectNodes,SelectSingleNodeではXpath式を使用できます。
Xpath式を使用することでID定義をしていなくても'ID'属性を評価対象にElementを取得できます。
また、属性が'ID'出なくても評価対象として、指定することもできます。

nodes = xDoc.DocumentElement.SelectNodes("//name")
("//name")はPath式です
"//"はすべてのという意味
上記の場合だと全てのname要素を持つ全てのnodeがnodelistの変数に格納される
Xpath例:(全て現在のノードからです)
"./name" or "name""name"子ノード
"//name""name"子孫ノード
"../person"親ノードの子ノード=兄弟ノードの"person"エレメント
"//name/first-name""name"要素の子ノードの"first-name" ノード
"//@id""id"属性を持つノード
"//homepage@ title""homepege"要素の"title"属性を持つnode
"//parson[ @id>'1']""parson"要素が"id>1"のnode
"//parson[ @id=@id2]""parson"要素の属性"id"と"id2"が同じ値のノード
"//*[ @last-name='Mike']"last-name要素の内容が"mike"のnode
"//parson[ @id='1']/name""parson"エレメントの属性"id"が"1"の"name"子ノード
タグ

このページへのコメント

iZuHZv Fantastic article post. Great.

0
Posted by stunning seo guys 2014年01月23日(木) 12:12:27 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます