2011-09-04 2 views
0

Я использую Linq для XML с помощью eBay API и не могу получить даже базовую информацию из возвращаемого XML. Я пробовал каждую комбинацию from x in y select z и т. Д., Но мне не повезло.Не удается получить вложенную информацию из eBay API

Я загрузки данных с

var xml = XDocument.Load ("http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=***MY-KEY-OBSCURED**&RESPONSE-DATA-FORMAT=XML&REST-PAYLOAD&keywords=yamaha&paginationInput.entriesPerPage=1&paginationInput.pageNumber=1"); 

И я возвращаюсь следующий XML в соответствии с консолью и LINQPad.

<findItemsByKeywordsResponse xmlns="http://www.ebay.com/marketplace/search/v1/services"> <ack>Success</ack> <version>1.11.0</version> <timestamp>2011-09-04T12:15:10.595Z</timestamp> <searchResult count="1"> 
    <item> 
     <itemId>220841819907</itemId> 
     <title>YAMAHA RX-V592 SURROUND SOUND RECEIVER</title> 
     <globalId>EBAY-US</globalId> 
     <primaryCategory> 
     <categoryId>14981</categoryId> 
     <categoryName>Receivers</categoryName> 
     </primaryCategory> 
     <galleryURL>http://thumbs4.ebaystatic.com/pict/2208418199074040_1.jpg</galleryURL> 
     <viewItemURL>http://www.ebay.com/itm/YAMAHA-RX-V592-SURROUND-SOUND-RECEIVER-/220841819907?pt=Receivers_Tuners</viewItemURL> 
     <productId type="ReferenceID">46568009</productId> 
     <paymentMethod>PayPal</paymentMethod> 
     <autoPay>false</autoPay> 
     <postalCode>76638</postalCode> 
     <location>Crawford,TX,USA</location> 
     <country>US</country> 
     <shippingInfo> 
     <shippingServiceCost currencyId="USD">22.0</shippingServiceCost> 
     <shippingType>Flat</shippingType> 
     <expeditedShipping>false</expeditedShipping> 
     <oneDayShippingAvailable>false</oneDayShippingAvailable> 
     <handlingTime>3</handlingTime> 
     <shipToLocations>US</shipToLocations> 
     </shippingInfo> 
     <sellingStatus> 
     <currentPrice currencyId="USD">51.0</currentPrice> 
     <convertedCurrentPrice currencyId="USD">51.0</convertedCurrentPrice> 
     <bidCount>13</bidCount> 
     <sellingState>Active</sellingState> 
     <timeLeft>P0DT0H18M17S</timeLeft> 
     </sellingStatus> 
     <listingInfo> 
     <bestOfferEnabled>false</bestOfferEnabled> 
     <buyItNowAvailable>false</buyItNowAvailable> 
     <startTime>2011-08-28T12:33:27.000Z</startTime> 
     <endTime>2011-09-04T12:33:27.000Z</endTime> 
     <listingType>Auction</listingType> 
     <gift>false</gift> 
     </listingInfo> 
     <returnsAccepted>false</returnsAccepted> 
     <condition> 
     <conditionId>3000</conditionId> 
     <conditionDisplayName>Used</conditionDisplayName> 
     </condition> 
     <isMultiVariationListing>false</isMultiVariationListing> 
    </item> </searchResult> <paginationOutput> 
    <pageNumber>1</pageNumber> 
    <entriesPerPage>1</entriesPerPage> 
    <totalPages>819204</totalPages> 
    <totalEntries>819204</totalEntries> </paginationOutput> <itemSearchURL>http://www.ebay.com/sch/i.html?_nkw=yamaha&amp;_ddo=1&amp;_ipg=1&amp;_pgn=1</itemSearchURL> </findItemsByKeywordsResponse> 

Может кто-нибудь, пожалуйста, помогите мне найти информацию 1-го уровня, такие как ПДТ версии, а затем информацию вложенной в searchResult-> Item.

Итак, выше я имею в виду значения элементов ...

 
findItemsByKeywordsResponse->ack 
findItemsByKeywordsResponse->version 

, а также вложенной информация

 
findItemsByKeywordsResponse->searchResult->item->itemId 
findItemsByKeywordsResponse->searchResult->item->title 

Я проводил дни траления участков для ответа, но не нашел рабочего решения.

ответ

1

Вы не указали код кода, который вы пробовали, но я сильно подозреваю, что вам просто не хватает пространства имен. Код:

XNamespace ns = "http://www.ebay.com/marketplace/search/v1/services" 

XElement ack = doc.Root.Element(ns + "ack"); 
XElement version = doc.Root.Element(ns + "version"); 
IEnumerable<string> itemIds = doc.Root.Elements(ns + "searchResult") 
             .Element(ns + "item") 
             .Element(ns + "itemId") 
             .Select(x => (string) x); 
+0

спасибо тоже, очень оценили. – GHarping

0

Ebay сам предлагает библиотеку классов, чтобы иметь обертку вокруг clls на сервере ebay. посредством этого вы можете напрямую получать сильно типизированные объекты и не должны самостоятельно анализировать возвращенный xml.

посмотрите здесь, может помочь:

http://developer.ebay.com/products/finding/

в разделе «Инструменты» вы можете найти загрузки, включая библиотеку и примеры проектов для .NET и Java.

+0

Спасибо, я начал здесь, однако это больше кривой обучения для меня, и я заинтересован, чтобы узнать подход LINQ, но очень благодарны за помощь. – GHarping

1

Наиболее вероятной проблемой является пространство имен. Элементы документа находятся в пространстве имен http://www.ebay.com/marketplace/search/v1/services, и вы должны отразить это в своем запросе. Так, с этим:

XNamespace ns = "http://www.ebay.com/marketplace/search/v1/services"; 

Возвращает значение ack по:

xml.Root.Element(ns + "ack").Value 
+0

Большое спасибо, это была проблема. – GHarping

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