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 アドイン

    Ignite 2016で発表されたOffice アドイン関連の情報

    米国時間の9月26~30日にMicrosoftのビッグイベント「Ign…

  2. Office アドイン

    [Officeアドイン]アドイン コマンド(Add-In Commands)の紹介(2)

    昨年末に書いた記事で「アドイン コマンド」を紹介しているのですが、知ら…

  3. Office関連

    Office 2007のサポートが2017年10月10日に終了します。

    2007年1月にパッケージ版が発売されてから早10年、長らく活躍してき…

  4. Office アドイン

    Office アドインの概要と開発方法を学ぶための自習書

    2018年10月27日(土)、品川の日本マイクロソフト本社で「2018…

  5. アイコン一覧

    Office 365アイコン(imageMso)一覧(J)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  6. Office関連

    ExcelのWebクエリからのアクセス情報

    mougに面白い質問がありました。・Querytables.a…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP