質問: xml.selectsinglenode("//recordset/recordgroup/record[@id='2']/recrule/description") recruleに名前空間の定義がない場合や、名前空間ではない普通の属性値の設定であれば上記のxpathで要素が取得できることは確認できています。代替策として、record[@id='2']までを取得して、そのchildnodes(0)の~という具合で取得していくことはできるですが、もやもやっとするので解決したいと思っています。 このxml文書のフォーマットを私がかえることはできません。 excel vba, windows 7 64bit
回答: 要素 recrule とその子孫要素は接頭辞こそ省略されていますが、 れっきとした xml 名前空間が定義されています。 以下の二行は xml 的に同じ意味です。 1番目 1番目 そのため xpath にて要素を指定する際は、名前空間も含めて記述する必要があります。 msxml の場合は selectionnamespaces のプロパティで指定する様です。 https://msdn.microsoft.com/ja-jp/library/ms756048.aspx // サンプル ns = "xmlns:r='http://myschemas.org/record.set'"; dom.setproperty("selectionnamespaces", ns); record = dom.selectsinglenode("//r:recrule/r:description"); どうやら msxml では接頭辞なしで名前空間を指定する方法がないようなので、 適当な接頭辞を決めて xpath を書いてください。