0

私は今、1週間以上単純なAPIの使用法に固執しています。詳細はこちらです。

ebay.comへのAPI呼び出しを行おうとしています。これが私のコードのようです...

これは開始ページのコードです:

 protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Results.aspx?Keywords=" + searchString.Text);  
    }

このページは、次のコードに誘導されます。

if (Request.QueryString["Keywords"] != null){
        string keywords = Request.QueryString["Keywords"];
            string myAppID = "HIDDEN";
            var xml = XDocument.Load("http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=" + myAppID + "&RESPONSE-DATA-FORMAT=XML&REST-PAYLOAD&keywords=" + keywords + "&paginationInput.entriesPerPage=5");
            XNamespace ns = "http://www.ebay.com/marketplace/search/v1/services";
            var titles = from item in xml.Root.Descendants(ns + "title")
                              select new{
                                  title = xml.Descendants(ns + "title").Select (x => x.Value),
                              };
        foreach (var item in titles){
                Label1.Text += item;
            } 
        }

xmlの例を次に示します。

<findItemsByKeywordsResponse xmlns="http://www.ebay.com/marketplace/search/v1/services">
<searchReslut count="5">
<item>
    <title></title>
</item>
<item>
    <title></title>
</item>
<item>
    <title></title>
</item>

私は実際には、アイテムをリストするだけでなく、アイテムを配列に変換します。最初にもっと簡単なアプローチを試してみようと思っただけです。私が得るエラーは次のとおりです:私のラベルへのforループ出力は次のようになります:

{ title = System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] }{ title = System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] }{ title = System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] }{ title = System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] }{ title = System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] }

そして、出力例外は次のとおりです。

タイプ'System.Threading.ThreadAbortException'の最初のチャンスの例外がmscorlib.dllで発生しましたタイプ'System.Threading.ThreadAbortException'の例外がmscorlib.dllで発生しましたが、ユーザーコードで処理されませんでしたスレッド''(0x27ee4)が終了しましたコード0(0x0)。

どんな助けでも大歓迎です!

4

2 に答える 2

1

例外は次のものから来ています:

var titles = from item in xml.Root.Descendants(ns + "title")
             select new
             {
                 title = item.Parent.Element("title").Value,
             };

親に移動する必要はありません。タイトルの値を直接取得できます。それが検索対象であるためです。

xml.Descendants(ns + "title").Select (x => x.Value)

また、こちらの「Asking Better Questions 」も参照してください。これにより、より迅速で適切な回答が得られる可能性があります。あなたの質問には関連性のない大量のコードがあり、実際に助けが必要なものに到達するために解析するのは困難です。

于 2012-06-27T01:47:54.623 に答える
0

これはかなり簡単に達成できるはずです。以下のコードを使用してみてください。上の部分では、例からサンプル XML をセットアップし、それを XElement に解析しています (注: 一部の終了タグが欠落しており、「searchReslut」ノードが「searchResult」であると想定しています)。次に、名前が「title」で、値が null でないルート ノードからすべての子孫ノードを取得します。次に、作成された IEnumerable を単純にループし、ラベルのテキストを連結します。ご不明な点がございましたら、お知らせください。

string ns = "http://www.ebay.com/marketplace/search/v1/services";
string returnedXml = "<findItemsByKeywordsResponse xmlns=\"" + ns + "\">" +
                    "<searchReslut count=\"5\">" +
                        "<item>" +
                            "<title>Title1</title>" +
                        "</item>" +
                        "<item>" +
                            "<title>Title2</title>" +
                        "</item>" +
                        "<item>" +
                            "<title>Title3</title>" +
                        "</item>" +
                     "</searchReslut>" +
                    "</findItemsByKeywordsResponse>";
        XElement xml = XElement.Parse(returnedXml);
        IEnumerable<XElement> titleNodes = xml.Descendants("title").Where(x => x.Value != null);
        foreach (XElement t in titleNodes)
        {
            Label1.Text += t.Value;
        }            
于 2012-07-05T15:50:19.413 に答える