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

ExcelのVBAのおける、XMLの取り扱いについて。

ExcelのVBAで、下記のようなXMLを取扱います。

for文で、すべての「Condition」要素と、
「Amount」要素を取り出したいのですが、どうしたらよいでしょうか。

例えば、要素が1つしかない「TotalOffers」なら、以下の様に書けばOKでした。

Set Offers = xml_data.selectSingleNode("Offers")
Offers.getElementsByTagName("TotalOffers")(0).Text

「Condition」要素と、「Amount」要素は、複数あるのでアクセス方法が分かりません。

◆対象のXML

<Offers>
<TotalOffers>2</TotalOffers>
<TotalOfferPages>1</TotalOfferPages>
<Offer>
<OfferAttributes>
<Condition>New</Condition>
</OfferAttributes>
<OfferListing>
<Price>
<Amount>2100</Amount>
<CurrencyCode>JPY</CurrencyCode>
<FormattedPrice>¥ 2,100</FormattedPrice>
</Price>
<Availability>在庫あり。</Availability>
</OfferListing>
</Offer>
<Offer>
<OfferAttributes>
<Condition>Used</Condition>
</OfferAttributes>
<OfferListing>
<Price>
<Amount>800</Amount>
<CurrencyCode>JPY</CurrencyCode>
<FormattedPrice>¥ 800</FormattedPrice>
</Price>
<Availability>通常1?2営業日以内に発送</Availability>
</OfferListing>
</Offer>
</Offers>

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

▽最新の回答へ

1 ● a-kuma3
●333ポイント ベストアンサー

For Each で回すとか、

 Set Amounts = xml_data.getElementsByTagName("Amount")
 For Each e In Amounts
 MsgBox e.Text
 Next

For で回すとか。

 Set Amounts = xml_data.getElementsByTagName("Amount")
 For i = 0 To Amounts.Length - 1
 MsgBox Amounts(i).Text
 Next



追記です。

「Condition」と「Amount」はひもづけて取り出したいです。
また、「Offer」ブロックはここでは2つですが、増減します。

では、こんな感じで。

 Set offer = xml_data.getElementsByTagName("Offer")
 For Each e In offer
 Set amount = e.getElementsByTagName("Amount")
 Set condition = e.getElementsByTagName("Condition")
 MsgBox amount(0).Text
 MsgBox condition(0).Text
 Next

Offer 要素を取り出して、For Each で回し、その下にある Amount と Condition を getElementsByTagName() メソッドで取り出してます。
Offer の下に、Amount や Condition がひとつだけだというのを前提にしてます。

# ポイントは 100pt でも、全然 OK ですよん♪


tetlisさんのコメント
「Condition」と「Amount」はひもづけて取り出したいです。 また、「Offer」ブロックはここでは2つですが、増減します。 説明不足で申し訳ありません。

a-kuma3さんのコメント
回答に追記しました。

質問者から

「Condition」と「Amount」はひもづけて取り出したいです。
また、「Offer」ブロックはここでは2つですが、増減します。

さしあげるポイントは「100ポイント」ではなく、「300ポイント」に変更いたします。


2 ● cx20
●100ポイント

XPath 形式で書いてみました。

Option Explicit

Sub ShowXmlData()
 Dim xml_data
 Set xml_data = CreateObject("Msxml2.DOMDocument.6.0")
 xml_data.Load "sample.xml"
 
 Dim cond
 Dim amt
 
 Dim nodes
 Set nodes = xml_data.SelectNodes("/Offers/Offer")

 Dim node
 For Each node In nodes
 Set cond = node.SelectSingleNode("OfferAttributes/Condition")
 Set amt = node.SelectSingleNode("OfferListing/Price/Amount")
 Debug.Print "Condition = [" & cond.Text & "], Amount = [" & amt.Text & "]"
 Next
End Sub
<実行結果>
Condition = [New], Amount = [2100]
Condition = [Used], Amount = [800]

<参考情報>
■ MSXML DOM の SelectNodes メソッドで XPath クエリを使用する方法
http://support.microsoft.com/kb/288913/ja


tetlisさんのコメント
XPathは全然知りませんでした。 今後の参考させていただきます。ありがとうございました!
関連質問

●質問をもっと探す●



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