'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定義…めんどくさい!! というわけでちょっと改良し
要するに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式を使用することでID定義をしていなくても'ID'属性を評価対象にElementを取得できます。
また、属性が'ID'出なくても評価対象として、指定することもできます。
nodes = xDoc.DocumentElement.SelectNodes("//name")
("//name")はPath式です
"//"はすべてのという意味
上記の場合だと全てのname要素を持つ全てのnodeがnodelistの変数に格納される
"./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.