2011-07-09 4 views
0

私はC#とXML経由でeBayを検索しようとしています。 XMLを文字列に書き出すことで有効なXML応答が得られるのがわかりますが、C#を使用してXMLを解析することはできません。私APPNAMEキーを削除してeBayのapi結果xmlを解析するときに要素が見つかりません

はここで、私のコードです:

string xmldata = "<?xml version='1.0' encoding='utf-8'?>"; 
    xmldata += "<findItemsAdvancedRequest xmlns='http://www.ebay.com/marketplace/search/v1/services'>"; 
    xmldata += "<keywords>sneakers</keywords>"; 
    xmldata += "<categoryId>1</categoryId>"; 
    xmldata += "<descriptionSearch>false</descriptionSearch>"; 
    xmldata += "<paginationInput>"; 
    xmldata += "<entriesPerPage>5</entriesPerPage>"; 
    xmldata += "</paginationInput>"; 
    xmldata += "</findItemsAdvancedRequest>"; 

    string url = "http://svcs.ebay.com/services/search/FindingService/v1"; 
    //Create a HttpWebRequest object 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 

    //Convert xml string to a byte array  
    byte[] postDataBytes = Encoding.ASCII.GetBytes(xmldata); 

    //Set the Method property 
    req.Method = "POST"; 
    //Set the ContentType property of the "HttpWebRequest" 
    req.ContentType = "text/xml;charset=UTF-8"; 
    req.Headers.Add("X-EBAY-SOA-SERVICE-NAME", "FindingService"); 
    req.Headers.Add("X-EBAY-SOA-OPERATION-NAME", "findItemsAdvanced"); 
    req.Headers.Add("X-EBAY-SOA-SERVICE-VERSION", "1.4.0"); 
    req.Headers.Add("X-EBAY-SOA-GLOBAL-ID", "EBAY-GB"); 
    req.Headers.Add("X-EBAY-SOA-REQUEST-DATA-FORMAT", "XML"); 
    req.Headers.Add("X-EBAY-SOA-SECURITY-APPNAME: **********************"); 


    //Set the ContentLength property of the "HttpWebRequest" 
    req.ContentLength = postDataBytes.Length; 

    Stream requestStream = req.GetRequestStream(); 
    requestStream.Write(postDataBytes, 0, postDataBytes.Length); 
    requestStream.Close(); 

    HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

    XDocument myXML = XDocument.Load(resp.GetResponseStream()); 

    IEnumerable<XElement> elements = myXML.Root.Element("searchResult").Elements("item"); 

私は最後の行の様々な組み合わせを試してみた - 例えば子孫の数を取得、常に一致する要素ののバリエーションを取得しますメッセージ。私は結果がそこにあることを知っています:ブレークポイントを設定し、Visual StudioでmyXML変数を見ると、XMLはすべてルートにあるようです。

+0

受信しているXMLを投稿した場合は、本当に役に立ちます。 – svick

答えて

0

問題は、返されたXMLがXML名前空間を使用していて、クエリがそうでないことです。ネームスペースがサーバーに送信するXMLの名前空間と同じであると仮定すると、次のようになります。

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

var elements = myXML.Root.Element(ns + "searchResult").Elements(ns + "item"); 
+0

ありがとうございましたsvick、うまくいきました - 始めに名前空間を持つ必要がある理由を完全には理解していないので、私はいくつかの研究をする必要があります。特にこれらの2つの文字列を追加すると、http://www.ebay.com/marketplace/search/v1/servicesSearchresultsとhttp://www.ebay.com/marketplace/search/v1/servicesitemが表示されます!! – MarkC80

+0

@マーク、あなたは文字列を追加していません。 'ns'は[' XNamespace'](http://msdn.microsoft.com/en-us/library/system.xml.linq.xnamespace.aspx)であり、それに文字列を追加すると['XName'] (http://msdn.microsoft.com/en-us/library/system.xml.linq.xname.aspx)が作成されます。 – svick

関連する問題