2014-12-22 2 views
0

Я пытаюсь проанализировать XML-данные и нелегко это сделать. Вот XML частьКонкретная информация из XML-документа

<?xml version="1.0"?> <GetLowestOfferListingsForASINResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"> <GetLowestOfferListingsForASINResult ASIN="b0091raue4" status="Success"> <AllOfferListingsConsidered>true</AllOfferListingsConsidered> <Product xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd"> 
    <Identifiers> 
     <MarketplaceASIN> 
     <MarketplaceId>ATVPDKIKX0DER</MarketplaceId> 
     <ASIN>b0091raue4</ASIN> 
     </MarketplaceASIN> 
    </Identifiers> 
    <LowestOfferListings> 
     <LowestOfferListing> 
     <Qualifiers> 
      <ItemCondition>New</ItemCondition> 
      <ItemSubcondition>New</ItemSubcondition> 
      <FulfillmentChannel>Amazon</FulfillmentChannel> 
      <ShipsDomestically>True</ShipsDomestically> 
      <ShippingTime> 
      <Max>0-2 days</Max> 
      </ShippingTime> 
      <SellerPositiveFeedbackRating>98-100%</SellerPositiveFeedbackRating> 
     </Qualifiers> 
     <NumberOfOfferListingsConsidered>7</NumberOfOfferListingsConsidered> 
     <SellerFeedbackCount>723</SellerFeedbackCount> 
     <Price> 
      <LandedPrice> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>28.70</Amount> 
      </LandedPrice> 
      <ListingPrice> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>28.70</Amount> 
      </ListingPrice> 
      <Shipping> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>0.00</Amount> 
      </Shipping> 
     </Price> 
     <MultipleOffersAtLowestPrice>False</MultipleOffersAtLowestPrice> 
     </LowestOfferListing> 
     <LowestOfferListing> 
     <Qualifiers> 
      <ItemCondition>New</ItemCondition> 
      <ItemSubcondition>New</ItemSubcondition> 
      <FulfillmentChannel>Amazon</FulfillmentChannel> 
      <ShipsDomestically>True</ShipsDomestically> 
      <ShippingTime> 
      <Max>0-2 days</Max> 
      </ShippingTime> 
      <SellerPositiveFeedbackRating>95-97%</SellerPositiveFeedbackRating> 
     </Qualifiers> 
     <NumberOfOfferListingsConsidered>1</NumberOfOfferListingsConsidered> 
     <SellerFeedbackCount>27</SellerFeedbackCount> 
     <Price> 
      <LandedPrice> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>29.00</Amount> 
      </LandedPrice> 
      <ListingPrice> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>29.00</Amount> 
      </ListingPrice> 
      <Shipping> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>0.00</Amount> 
      </Shipping> 
     </Price> 
     <MultipleOffersAtLowestPrice>False</MultipleOffersAtLowestPrice> 
     </LowestOfferListing> 


    <LowestOfferListing> 
     <Qualifiers> 
      <ItemCondition>Collectible</ItemCondition> 
      <ItemSubcondition>Mint</ItemSubcondition> 
      <FulfillmentChannel>Merchant</FulfillmentChannel> 
      <ShipsDomestically>True</ShipsDomestically> 
      <ShippingTime> 
      <Max>0-2 days</Max> 
      </ShippingTime> 
      <SellerPositiveFeedbackRating>98-100%</SellerPositiveFeedbackRating> 
     </Qualifiers> 
     <NumberOfOfferListingsConsidered>1</NumberOfOfferListingsConsidered> 
     <SellerFeedbackCount>1138</SellerFeedbackCount> 
     <Price> 
      <LandedPrice> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>129.99</Amount> 
      </LandedPrice> 
      <ListingPrice> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>125.00</Amount> 
      </ListingPrice> 
      <Shipping> 
      <CurrencyCode>USD</CurrencyCode> 
      <Amount>4.99</Amount> 
      </Shipping> 
     </Price> 
     <MultipleOffersAtLowestPrice>False</MultipleOffersAtLowestPrice> 
     </LowestOfferListing> 
    </LowestOfferListings> 
    </Product> 
</GetLowestOfferListingsForASINResult> 
<ResponseMetadata> 
    <RequestId>ba623b4e-338b-4bc7-9ee0-9fd2e20489d3</RequestId> 
</ResponseMetadata> 
</GetLowestOfferListingsForASINResponse> 

Я хочу, чтобы перебрать все «LowestOfferListing» узлы просто вернуть «ItemCondition» и «Сумма».

Я попытался помещать данные в XML-документ, набор данных и данные. Вот где я нахожусь:

 Dim xml As New Xml.XmlDocument() 
     xml.LoadXml(responseBody) 
     Dim ds As New DataSet 
     ds.ReadXml(New StringReader(responseBody)) 

Кто-нибудь знает, как пройти через петлю и отступить только эти два значения?

+0

Это также не работает:. Для каждой строки в ds.Tables ("LowestOfferListing") Rows MsgBox (. Row.item ("Отборочные/ItemCondition") ToString) Следующая – NeedSomeAnswers

ответ

2

LINQ to XML предлагает хороший API-интерфейс для запроса XML, особенно в VB.NET с поддержкой XML-литеральных данных. например Это покажет поля ItemCondition и Amount (from ListingPrice).

Обновление Вам понадобится импорт пространства имен XML, добавленный ниже, чтобы заставить работу работать.

Imports System.Xml.Linq 
' Import the XML namespace for the elements being queried 
Imports <xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"> 
'... 
Dim xml = XElement.Parse(responseBody) 
Dim result = 
    From item In xml...<LowestOfferListing> 
    Select 
     Condition = item.<Qualifiers>.<ItemCondition>.Value, 
     Amount = item.<Price>.<ListingPrice>.<Amount>.Value 
For Each item In result 
    Console.WriteLine("{0} - {1}", item.Condition, item.Amount) 
Next 
+0

Я оставляю «...» перед «»? – NeedSomeAnswers

+0

Это тоже не работает. Нет данных. Я знаю, что у меня есть данные, потому что я могу помещать данные в набор данных и видеть его (ds.ReadXml (New StringReader (responseBody)) – NeedSomeAnswers

+0

Я считаю, что проблема, вероятно, связана с пространствами имен, которые я вырезал при создании кода, потому что ваши данные образца были неполными. Дайте мне несколько минут, чтобы настроить. – Mark

0

Вы должны использовать XPath для этого:

Dim xpathDoc As XPathDocument 
Dim xmlNav As XPathNavigator 
Dim xmlNI As XPathNodeIterator 
xpathDoc = New XPathDocument("c:\builder.xml") 
xmlNav = xpathDoc.CreateNavigator() 
xmlNI = xmlNav.Select("/LowestOfferListings/LowestOfferListing/Qualifiers/ItemCondition") 
While (xmlNI.MoveNext()) 
    System.Console.WriteLine(xmlNI.Current.Name + " : " + xmlNI.Current.Value) 
End While 

XPath должно соответствовать вложенности элемента, который вы заинтересованы в XML.

+0

Благодаря Jerome - но я не получаю никаких данных. Он идет от «Пока» до «Конец пока». Может ли путь быть неправильным? – NeedSomeAnswers

+0

см. Пересмотренный код. вам нужно сопоставить xpath express в соответствии с вложением элемента xml, который вы хотите получить –

+0

Спасибо, Джером, но это тоже не работает. – NeedSomeAnswers

Смежные вопросы