ExcelのVBAでXML文書のデータを取得する方法について。


ExcelのVBAで、下記コードのようにWEB上からXMLを取得し、
所得したXML中の、

・「tmo:ItemName」の値(この場合"焼き芋")
・「tmo:TotalPrice」の値(この場合"300")

を取得するにはどうしたらよいでしょうか?




◆XMLを取得するためのコード
Dim URL AS String
Dim XMLData

URL = "http://example.com/100/text.xml"

Set XMLData = CreateObject("Microsoft.XMLDOM")
XMLData.load URL



◆取得したXML
<tmo:ItemResponse xmlns:tmo="http://example.com/100">
  <tmo:TotalPrice>
    300
  </tmo:TotalPrice>
  <tmo:Items>
    <tmo:Item>
      <tmo:ItemCode>
        112604378
      </tmo:ItemCode>
      <tmo:ItemName>
        焼き芋
      </tmo:ItemName>
    </tmo:Item>
  </tmo:Items>
</tmo:SearchItemResponse>

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/06/11 16:43:40
  • 終了:2012/06/11 19:59:48

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4595ベストアンサー獲得回数19342012/06/11 19:10:12

ポイント120pt

そうそう。MSXML では GetElementsByTagName では namespace が使えないんですよね。
代わりに、SelectNodes 系のメソッドを使います。
こんな感じで。

'   tmo:TotalPrice を取り出す
Set price = XMLData.SelectSingleNode("//tmo:ItemResponse/tmo:TotalPrice")

'   tmo:ItemName を取り出す(複数っぽいね)
Set nameList = XMLData.SelectNodes("//tmo:ItemResponse/tmo:Items/tmo:Item/tmo:ItemName")

得られたNode から Text プロパティで内容を取り出します。



同じような困り方をしてる人が、ここにも。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29670&forum=9&start=8

id:tetlis

ようやく解決できました!ありがとうございます。

2012/06/11 19:58:50

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982012/06/11 17:29:28

ポイント50pt

http://officetanaka.net/excel/vba/function/InStr.htm

この場合、INSTRという関数を使います。

<tmo:ItemName>というのが 一回しか出てこない場合は、

INSTR(1,文字列,"<tmo:ItemName>")
で <tmo:ItemName>の開始位置を取得します。

それから  </tmo:ItemName>までの位置を取得します。
この場合
INSTR(最初に取得した値,文字列,"</tmo:ItemName>")
とやればいいでしょう。

その二つの値から計算してMID関数を使って取得すればいいのです。

他1件のコメントを見る
id:taknt
id:tetlis

直接の解決手段にはならなかったのですが、今後参考になりそうな頁です。ご紹介ありがとうございました。

2012/06/11 19:59:22
id:a-kuma3 No.2

a-kuma3回答回数4595ベストアンサー獲得回数19342012/06/11 19:10:12ここでベストアンサー

ポイント120pt

そうそう。MSXML では GetElementsByTagName では namespace が使えないんですよね。
代わりに、SelectNodes 系のメソッドを使います。
こんな感じで。

'   tmo:TotalPrice を取り出す
Set price = XMLData.SelectSingleNode("//tmo:ItemResponse/tmo:TotalPrice")

'   tmo:ItemName を取り出す(複数っぽいね)
Set nameList = XMLData.SelectNodes("//tmo:ItemResponse/tmo:Items/tmo:Item/tmo:ItemName")

得られたNode から Text プロパティで内容を取り出します。



同じような困り方をしてる人が、ここにも。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29670&forum=9&start=8

id:tetlis

ようやく解決できました!ありがとうございます。

2012/06/11 19:58:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません