解析XML空引用异常错误? C#ASP

时间:2012-06-27 00:13:36

标签: c# asp.net xml linq ebay

我现在已经超过一周的时间了。以下是详细信息。

尝试向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] }

输出异常是:

mscorlib.dll中出现'System.Threading.ThreadAbortException'类型的第一次机会异常 mscorlib.dll中出现“System.Threading.ThreadAbortException”类型的异常,但未在用户代码中处理 线程''(0x27ee4)已退出,代码为0(0x0)。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分: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,因为它可能会让你更快/更好的回复。您的问题中有大量代码不相关,并且难以解析以获得您实际需要帮助的内容。

答案 1 :(得分: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;
        }