LINQ to XML. NullReferenceExeption при чтении атрибутов - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Нужна помощь, пробую распарсить ствоку но выдает NullReferenceExeption. Сделал похожый пример, он работает нормально. XML который я пытаюсь распарсить:
Листинг программы
  1. <exchangerates>
  2. <row>
  3. <exchangerate ccy="RUR" base_ccy="UAH" buy="0.37817" sale="0.37817"/>
  4. </row>
  5. <row>
  6. <exchangerate ccy="EUR" base_ccy="UAH" buy="18.03042" sale="18.03042"/>
  7. </row>
  8. <row>
  9. <exchangerate ccy="USD" base_ccy="UAH" buy="13.65941" sale="13.65941"/>
  10. </row>
  11. </exchangerates>
Сам код метода который парсит XML и на 7-12 строке выдает NullReferenceExeption
Листинг программы
  1. static List<Curency> Parse(string inputXml)
  2. {
  3. XDocument xdoc = XDocument.Parse(inputXml);
  4. List<Curency> outputList = new List<Curency>();
  5. var currency = from ccr in xdoc.Element("exchangerates").Elements("row")
  6. select new Curency
  7. {
  8. Type = ccr.Attribute("ccy").Value,
  9. Buy = Convert.ToDecimal(ccr.Attribute("buy").Value),
  10. Sale = Convert.ToDecimal(ccr.Attribute("sale").Value)
  11. };
  12. foreach (var ccr in currency)
  13. {
  14. outputList.Add(ccr);
  15. }
  16. return outputList;
  17. }
Код метода который передает строку XML
Листинг программы
  1. public static List<Curency> GetCurrency()
  2. {
  3. string responseXML = "";
  4. WebRequest request = WebRequest.Create("https://api.privatbank.ua/p24api/pubinfo?exchange&coursid=5");
  5. WebResponse response = request.GetResponse();
  6. using (Stream stream = response.GetResponseStream())
  7. {
  8. using (StreamReader reader = new StreamReader(stream))
  9. {
  10. responseXML = reader.ReadToEnd();
  11. }
  12. }
  13. return Parse(responseXML);
  14. }

Решение задачи: «LINQ to XML. NullReferenceExeption при чтении атрибутов»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml.Linq;
  6. using System.Globalization;
  7.  
  8. namespace ConsoleApplication19 {
  9.     class Program {
  10.         static void Main(string[] args) {
  11.             XDocument doc = XDocument.Load(@"C:\test.xml");
  12.             var currency = doc.Descendants("exchangerate").Select(item =>
  13.                 new Currency {
  14.                     Type = item.Attribute("ccy").Value,
  15.                     Buy = decimal.Parse(item.Attribute("buy").Value, NumberStyles.Currency, NumberFormatInfo.InvariantInfo),
  16.                     Sale = decimal.Parse(item.Attribute("sale").Value, NumberStyles.Currency, NumberFormatInfo.InvariantInfo)
  17.                 });
  18.             foreach(var c in currency){
  19.                 Console.WriteLine(c);
  20.             }
  21.             Console.ReadLine();
  22.         }
  23.     }
  24.     class Currency {
  25.         public string Type { get; set; }
  26.         public decimal Buy { get; set; }
  27.         public decimal Sale { get; set; }
  28.         public override string ToString() {
  29.             return string.Format("Type: {0} Buy: {1} Sale: {2}", Type, Buy, Sale);
  30.         }
  31.     }
  32. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы