2013-02-14 77 views
0

我怎样才能转化成http://www.floatrates.com/daily/USD.xml列表在C#转换XML数据到一个列表

到目前为止,我有:

protected void btnUpdate_Click (object sender, EventArgs e) { 

    XmlDocument xmlDoc = new XmlDocument (); 
    xmlDoc.Load ("http://www.floatrates.com/daily/USD.xml"); 
    XmlNodeList itemNodes = xmlDoc.SelectNodes ("//channel/title/link/description/language/pubDate/lastBuildDate/item"); 
    foreach (XmlNode itemNode in itemNodes) { 

     XmlNode currencyNode = itemNode.SelectSingleNode ("targetCurrency"); 
     XmlNode rateNode = itemNode.SelectSingleNode ("exchangeRate"); 




     GridView2.DataSource = lstdata; 
     GridView2.DataBind (); 
    } 
+2

那么,你有没有考虑创建自己的类,每个元素的实例? (如果可以,我强烈建议使用LINQ to XML。) – 2013-02-14 08:41:27

回答

1

我会创建一个对象来保存这些值并使用Linq2XML来查询xml文档。

protected void btnUpdate_Click (object sender, EventArgs e) 
    { 
     GridView2.DataSource = GetFloatRates(); 
     GridView2.DataBind (); 
    } 

    private List<FloatRateItem> GetFloatRates() 
    { 
     XDocument xmlDoc = XDocument.Load("http://www.floatrates.com/daily/USD.xml"); 
     var floatRates = xmlDoc.Descendants("channel"); 

     var items = from i in floatRates.Elements("item") 
        select new FloatRateItem 
        { 
         Title = i.Element("title").Value, 
         Link = i.Element("link").Value, 
         Description = i.Element("description").Value, 
         PubDate = i.Element("pubDate").Value, 
         BaseCurrency = i.Element("baseCurrency").Value, 
         TargetCurrency = i.Element("targetCurrency").Value, 
         ExchangeRate = i.Element("exchangeRate").Value 
        }; 

     return items.ToList(); 
    } 

    class FloatRateItem 
    { 
     public string Title { get; set; } 
     public string Link { get; set; } 
     public string Description { get; set; } 
     public string PubDate { get; set; } 
     public string BaseCurrency { get; set; } 
     public string TargetCurrency { get; set; } 
     public string ExchangeRate { get; set; } 

     public override string ToString() 
     { 
      return string.Format(@"<item> 
<title>{0}</title> 
<link>{1}</link> 
<description>{2}</description> 
<pubDate>{3}</pubDate> 
<baseCurrency>{4}</baseCurrency> 
<targetCurrency>{5}</targetCurrency> 
<exchangeRate>{6}</exchangeRate> 
</item>", Title, Link, Description, PubDate, BaseCurrency, TargetCurrency, ExchangeRate); 
     } 
    } 
+0

完美谢谢你 – Leventis1984 2013-02-14 09:03:34

1

这将做你想做的。修改ds.Tables[0].Rows行以从XML获取所需的数据。

public static List<string> ProcessXMLDoc() 
{ 
     XmlDocument xDoc = new XmlDocument(); 
     xDoc.Load("http://www.floatrates.com/daily/USD.xml"); 
     List<string> xmlList = new List<string>(); 
     StringReader sr = new StringReader(xDoc.OuterXml); 

     DataSet ds = new DataSet(); 
     ds.ReadXml(sr); 

     foreach (DataRow row in ds.Tables[0].Rows) 
     { 
      if (!string.IsNullOrWhiteSpace(row[0].ToString())) 
      { 
       xmlList.Add(row[0].ToString()); 
      } 
     } 

     return xmlList; 
    } 
+0

感谢您的快速回答。首先我想检索只有 按下按钮到我的gridview – Leventis1984 2013-02-14 08:56:47