Tech Communityに、“XPathで名前空間プレフィックス付の要素を取得したい”、という質問がありました。
これはXMLを扱うときに割とよくハマるポイントで、Microsoftのサポートページにも対応策が記載されています。
要するに、setPropertyメソッドで、SelectionNamespacesプロパティの値として名前空間を指定してあげれば良いわけですね。
Public Sub Sample()
Dim src As String
Dim lst As Object
src = "<?xml version ='1.0' encoding='utf-8'?>" & vbNewLine & _
"<a:Books xmlns:a='x-schema:bookschema.xml'>" & vbNewLine & _
" <a:Book>" & vbNewLine & _
" <title>Presenting XML</title>" & vbNewLine & _
" <author>Richard Light</author>" & vbNewLine & _
" </a:Book>" & vbNewLine & _
" <a:Book>" & vbNewLine & _
" <title>Mastering VBA for Microsoft Office 2016</title>" & vbNewLine & _
" <author>Richard Mansfield</author>" & vbNewLine & _
" </a:Book>" & vbNewLine & _
"</a:Books>"
With CreateObject("MSXML2.DOMDocument.6.0")
.async = False
If .LoadXML(src) = True Then
.SetProperty "SelectionLanguage", "XPath"
.SetProperty "SelectionNamespaces", "xmlns:a='x-schema:bookschema.xml'" '名前空間の指定
Set lst = .SelectNodes("//a:Book")
Debug.Print lst.Item(0).XML
Stop
End If
End With
End Sub
上記コードは簡単なサンプルですが、コード中の下記行をコメントアウトするとオートメーションエラーが発生するのが分かるかと思います。
.SetProperty "SelectionNamespaces", "xmlns:a='x-schema:bookschema.xml'"




















この記事へのコメントはありません。