2013-02-14 2 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, если можно.) –

ответ

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

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

Смежные вопросы