Я пытаюсь проанализировать данные из XML-ответа API рекламы Amazon Product Advertising API. Я использую DOMDocument в excel vba для загрузки XML-документа и анализа resposne. Это как ответ XML выглядит следующим образом:Устранение элементов из XML API AMAZON в Excel VBA
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
<OperationRequest>
<RequestId>fd9f1314-29932-45a0-8fc4-c999276425f4</RequestId>
<RequestProcessingTime>0.0265880000000000</RequestProcessingTime>
</OperationRequest>
<Items>
<Request>
<IsValid>True</IsValid>
<ItemLookupRequest>
<IdType>ASIN</IdType>
<ItemId>B00CSDILZI</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>
</Items>
</ItemLookupResponse>
Я пытаюсь перебрать весь XML и извлечь детали элементов, как ASIN, FormattedPrice, низкие цены и т.д. на листе Excel. Это, как я попробовал:
Sub subReadXMLStream()
Dim xmlDoc As MSXML2.DOMDocument
Dim xEmpDetails As MSXML2.IXMLDOMNode
Dim xParent As MSXML2.IXMLDOMNode
Dim xChild As MSXML2.IXMLDOMNode
Dim Col, Row As Integer
Set xmlDoc = New MSXML2.DOMDocument
xmlDoc.async = False
xmlDoc.validateOnParse = False
' use XML string to create a DOM, on error show error message
If Not xmlDoc.Load("E:\web\offersumm.xml") Then
Err.Raise xmlDoc.parseError.ErrorCode, , xmlDoc.parseError.reason
End If
Set xEmpDetails = xmlDoc.DocumentElement
Set xParent = xEmpDetails.FirstChild
Row = 1
Col = 1
Dim xmlNodeList As IXMLDOMNodeList
Set xmlNodeList = xmlDoc.SelectNodes("//Item")
For Each xParent In xmlNodeList
For Each xChild In xParent.ChildNodes
Worksheets("Sheet2").Cells(Row, Col).Value = xChild.Text
Debug.Print Row & " - "; Col & " - " & xChild.Text
Col = Col + 1
Next xChild
Row = Row + 1
Col = 1
Next xParent
End Sub
Однако это печать весь текст в тегах в качестве как
1 - 1 - B00CSDILZI
1 - 2 - 26761 USD $267.61 22 0 0 0
1 - 3 - 1 1 ... ... ... 26761 USD $267.61 23841 USD $238.41 47 Usually ships in 1-2 business days now 24 48 0
Но то, что я пытаюсь достичь получить элементы по его имя тега и печать затем в ячейках. Может ли кто-нибудь сказать мне, что я делаю неправильно здесь?
Как же лист Excel выглядит? В вашем коде с данным XML первый 'xChild' является элементом' ASIN'. Это просто, хорошо. Но второй 'xChild' является элементом' OfferSummary', который является сложным элементом. У этого есть своя детская. Его первым дочерним элементом является элемент «LowestNewPrice», который также является сложным элементом. Итак, как эта сложная структура будет помещена в лист Excel? –
На самом деле я не пытаюсь распечатать каждый элемент. Меня интересуют только несколько параметров, таких как ASIN, FormattedPrice, Доступность и т. Д. И печатать их в столбцах excel. Именно поэтому я искал способ индивидуального доступа к элементам внутри тегов. –