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

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

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

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

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Globalization;
 
namespace ConsoleApplication19 {
    class Program {
        static void Main(string[] args) {
            XDocument doc = XDocument.Load(@"C:\test.xml");
            var currency = doc.Descendants("exchangerate").Select(item =>
                new Currency {
                    Type = item.Attribute("ccy").Value,
                    Buy = decimal.Parse(item.Attribute("buy").Value, NumberStyles.Currency, NumberFormatInfo.InvariantInfo),
                    Sale = decimal.Parse(item.Attribute("sale").Value, NumberStyles.Currency, NumberFormatInfo.InvariantInfo)
                });
            foreach(var c in currency){
                Console.WriteLine(c);
            }
            Console.ReadLine();
        }
    }
    class Currency {
        public string Type { get; set; }
        public decimal Buy { get; set; }
        public decimal Sale { get; set; }
        public override string ToString() {
            return string.Format("Type: {0} Buy: {1} Sale: {2}", Type, Buy, Sale);
        }
    }
}

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


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

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

15   голосов , оценка 3.933 из 5
Похожие ответы