人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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>


●質問者: tetlis
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント

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

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

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

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

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

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


tetlisさんのコメント
ありがとうございます。 確かにこれでできるとは思うのですが、XMLの要素をズバッと取り出せないですか。 Set Items = XMLData.getElementsByTagNameNS("aff", "ProductStatus")(0) こんな感じで直接要素を指定できないでしょうか。 名前空間(この場合「aff」)がないときは、 Set Items = XMLData.getElementsByTagName("ProductStatus")(0) こんな風に出来ていました。

きゃづみぃさんのコメント
こんな感じ? http://news.mynavi.jp/articles/2012/04/20/excelvba/001.html

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

2 ● a-kuma3
●120ポイント ベストアンサー

そうそう。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


tetlisさんのコメント
ようやく解決できました!ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ