Office関連

名前空間を指定してXPathで要素を取得するVBAマクロ

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'"

メールアドレスからExchangeUserを取得するOutlookマクロ前のページ

【アイカツフレンズ!】今日のアリシアコーデ(アイカツレストランコーデ)次のページ

関連記事

  1. Office関連

    PowerShellからClosedXMLを使ってExcelファイルを作成する方法

    以前C#からClosedXMLを使ってExcelファイルを操作する方法…

  2. アイコン一覧

    Office 2013 アイコン一覧(Q)

    ・Office 2013 アイコン一覧 NUM…

  3. Office アドイン

    [Office用アプリ]RSS表示アプリを作成する。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  4. Office アドイン

    [Office用アプリ]法人登録する際の参考資料

    法人としてMicrosoft Seller DashboardでOff…

  5. Office関連

    Gmail APIを使ってメール送信するVBAマクロ(3)

    前回、前々回とGmail APIを扱ってきましたが、今回は前々回の記事…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP