在Excel VBA中parsing来自AMAZON API的XML响应

我正在尝试parsing来自Amazon Product Advertising API XML响应的数据。 我在excel vba中使用DOMDocument来加载xml文档并parsingresposne。 这就是XML响应的样子:

<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"> <OperationRequest> <HTTPHeaders>...</HTTPHeaders> <RequestId>fd9f1314-29932-45a0-8fc4-c999276425f4</RequestId> <Arguments>...</Arguments> <RequestProcessingTime>0.0265880000000000</RequestProcessingTime> </OperationRequest> <Items> <Request> <IsValid>True</IsValid> <ItemLookupRequest> <IdType>ASIN</IdType> <ItemId>B00CSDILZI</ItemId> <ItemId>B00BSN8DN4</ItemId> <ResponseGroup>Offers</ResponseGroup> <VariationPage>All</VariationPage> </ItemLookupRequest> </Request> <Item> <ASIN>B00CSDILZI</ASIN> <OfferSummary> <LowestNewPrice> <Amount>26761</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$267.61</FormattedPrice> </LowestNewPrice> <TotalNew>22</TotalNew> <TotalUsed>0</TotalUsed> <TotalCollectible>0</TotalCollectible> <TotalRefurbished>0</TotalRefurbished> </OfferSummary> <Offers> <TotalOffers>1</TotalOffers> <TotalOfferPages>1</TotalOfferPages> <MoreOffersUrl>...</MoreOffersUrl> <Offer> <OfferAttributes>...</OfferAttributes> <OfferListing> <OfferListingId>...</OfferListingId> <Price> <Amount>26761</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$267.61</FormattedPrice> </Price> <AmountSaved> <Amount>23841</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$238.41</FormattedPrice> </AmountSaved> <PercentageSaved>47</PercentageSaved> <Availability>Usually ships in 1-2 business days</Availability> <AvailabilityAttributes> <AvailabilityType>now</AvailabilityType> <MinimumHours>24</MinimumHours> <MaximumHours>48</MaximumHours> </AvailabilityAttributes> <IsEligibleForSuperSaverShipping>0</IsEligibleForSuperSaverShipping> </OfferListing> </Offer> </Offers> </Item> <Item>...</Item> </Items> </ItemLookupResponse> 

我的最终目的是循环整个XML,并提取像ASIN,FormattedPrice,最低价格等项目的详细信息到Excel表。 但是,当我尝试访问XML树中的元素时,作为第一步,我无法做到成功。 我正在使用Excel 2013,并引用了Micrsoft XML 6.0。 这是我的尝试:

 Public Function xmlparse() Dim doc As DOMDocument60 Set doc = New DOMDocument60 doc.Load "C:\Users\Sam\Desktop\amazon\offersumm.xml" Dim Variables As IXMLDOMNodeList Dim variable As IXMLDOMNode Set Variables = doc.SelectNodes("/ItemLookupResponse/Items") For Each variable In Variables Debug.Print variable.SelectNodes("Item").Item(0).Text Next End Function 

但是我坚持在这个点上,因为这在控制台中没有打印任何东西。 任何人都可以告诉我如何访问元素像ASIN,金额从XML。

在XPath查询中,MSXML2如何处理XML中的默认命名空间存在已知问题。 如果要引用缺省名称空间中的节点,则必须为该名称空间创build一个前缀,然后在任何XPath查询中使用该前缀。

所以添加一个名称空间定义如下(我使用“r”作为前缀):

 Set doc = New DOMDocument60 doc.Load "C:\Users\Sam\Desktop\amazon\offersumm.xml" doc.setProperty "SelectionNamespaces", "xmlns:r='http://webservices.amazon.com/AWSECommerceService/2011-08-01'" Dim Variables As IXMLDOMNodeList Dim variable As IXMLDOMNode Set Variables = doc.SelectNodes("/r:ItemLookupResponse/r:Items") 

关于这个问题的更多细节可以在这里find