LINQ到XML——没有绑定

本文关键字:绑定 LINQ XML | 更新日期: 2023-09-27 18:06:07

我正在尝试从XML解析,但由于某种原因,我的文本框中没有显示我为变量绑定的内容。

我已经尝试了各种变化的xdocument或Xelement,但它似乎不工作。XML结构看起来相当直接,所以我不知道哪里出了问题。

如有任何帮助,不胜感激。

编辑* * * * * * * * * * * *

现在都在工作。谢谢你的帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Xml.Linq;


namespace TradeMe
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            WebClient Trademe = new WebClient();
            Trademe.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Trademe_DownloadStringCompleted);
            Trademe.DownloadStringAsync(new Uri ("http://api.trademe.co.nz/v1/Search/General.xml?search_string=" + TradeSearch.Text));
        }
        void Trademe_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error != null)
                return;
            var r = XDocument.Parse(e.Result);
            // Declare the namespace
            XNamespace ns = "http://api.trademe.co.nz/v1";
            listBox1.ItemsSource = from TM in r.Root.Descendants(ns + "Listing")
                                   select new TradeItem
                                   {
                                       //ImageSource = TM.Element(ns + "Listing").Element(ns + "PictureHref").Value,
                                       Message = TM.Element(ns + "Title").Value,
                                       UserName = TM.Element(ns + "Region").Value
                                   }; 
        }
        public class TradeItem
        {
            public string UserName { get; set; }
            public string Message { get; set; }
            public string ImageSource { get; set; }
        }


    }
}

XML是这样的

<SearchResults xmlns="http://api.trademe.co.nz/v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <TotalCount>12723</TotalCount> 
  <Page>1</Page> 
  <PageSize>50</PageSize> 
- <List>
- <Listing>
  <ListingId>399739762</ListingId> 
  <Title>Playstation 3 320GB Slim going at $1 Reserve</Title> 
  <Category>0202-6205-6207-</Category> 
  <StartPrice>1.0000</StartPrice> 
  <StartDate>2011-08-14T22:52:28.833Z</StartDate> 
  <EndDate>2011-08-21T08:45:00Z</EndDate> 
  <ListingLength i:nil="true" /> 
  <HasGallery>true</HasGallery> 
  <MaxBidAmount>400.0000</MaxBidAmount> 
  <AsAt>2011-08-18T19:33:41.4561556Z</AsAt> 
  <CategoryPath>/Gaming/PlayStation-3/Consoles</CategoryPath> 
  <PictureHref>http://images.trademe.co.nz/photoserver/thumb/27/183787627.jpg</PictureHref> 
  <RegionId>2</RegionId> 
  <Region>Auckland</Region> 
  <BidCount>137</BidCount> 
  <IsReserveMet>true</IsReserveMet> 
  <HasReserve>true</HasReserve> 
  <NoteDate>1970-01-01T00:00:00Z</NoteDate> 
  <ReserveState>Met</ReserveState> 
  <PriceDisplay>$400.00</PriceDisplay> 
  </Listing>

LINQ到XML——没有绑定

试试这个:

       // Declare the namespace
       XNamespace ns = "http://api.trademe.co.nz/v1";
       listBox1.ItemsSource = from TM in r.Root.Descendants(ns+"List")
                               select new TradeItem
                               {                                       
                                   ImageSource = TM.Element(ns+"Listing")
                                   .Element(ns+"PictureHref").Value,
                                    Message = TM.Element(ns+"PageSize").Value,
                                   UserName = TM.Element(ns+"SearchResults").Element(ns+"Page").Value
                               }; 

没有匹配,因为您没有指定名称空间。请参阅MSDN的示例代码,在这里重复:

XElement root = XElement.Parse(
@"<Root xmlns='http://www.adventure-works.com'>
    <Child>1</Child>
    <Child>2</Child>
    <Child>3</Child>
    <AnotherChild>4</AnotherChild>
    <AnotherChild>5</AnotherChild>
    <AnotherChild>6</AnotherChild>
</Root>");
XNamespace aw = "http://www.adventure-works.com";
IEnumerable<XElement> c1 =
    from el in root.Elements(aw + "Child")
    select el;
Console.WriteLine("Result set follows:");
foreach (XElement el in c1)
    Console.WriteLine((int)el);
Console.WriteLine("End of result set");