skip to Main Content

I am using Linq to XML with the eBay API and am unable to retrieve even basic information from the XML returned. I have tried every combination of from x in y select z etc but am having no luck.

I am loading the data with

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");

And I get back the following XML according to the console and 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>

Can anyone please help me find the 1st tier info such as ack and version and then the information nested within searchResult->Item.

So by the above I mean the values of the elements…

findItemsByKeywordsResponse->ack
findItemsByKeywordsResponse->version

and also the nested information

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

I have spent days trawling sites for the answer but have found no working solution.

3

Answers


  1. Ebay itself offers a class library to have a wrapper around the clls to the ebay server. by it you can directly receive strongly-typed objects and don’t have to parse the returned xml yourself.

    have a look here, might help:

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

    under “Tools” you can find downloads including the library and sample projects for .NET and Java.

    Login or Signup to reply.
  2. You haven’t shown any of the code that you’ve tried, but I strongly suspect you’re just missing the namespace. Code like this:

    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);
    
    Login or Signup to reply.
  3. The most likely problem is namespace. The elements in document are in the namespace http://www.ebay.com/marketplace/search/v1/services and you have to reflect this in your query. So, with this:

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

    Retrieve the value of ack by:

     xml.Root.Element(ns + "ack").Value
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search