Ошибка при чтении XML файла

76
16 февраля 2022, 04:10

Здравствуйте хочу вывести в консоль атрибут из xml файла

try {
    XDocument doc = new XDocument.Load(@ "Pay.xml");
    doc.Load();
    XmlNodeList nodes = doc.SelectNodes("response/auth/payment");
    foreach(XmlNode n in nodes)
        result = n.SelectSingleNode("@resultCode").Value;
    Console.WriteLine(result);
} 
catch (XmlException ex) {
    Console.WriteLine(ex);
}

Но выдает ошибку:

Объявление XML должно быть первым узлом в документе, использование знаков пробела перед ним не допускается.

Как исправить?

Вот XML:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <requestNum>525</requestNum>
  <terminalNum>742</terminalNum>
  <auth>
    <payment trn="0000000002"  resultCode="215" timeget="2020-01-10 17:05:19" />
  </auth>
</response>
Answer 1

Дело в том, что у вас не совсем верный XML с точки зрения библиотеки и стандарта. Нужен корневой элемент, который содержит остальные как узлы.

source.xml (обратите внимание, что файл должен находится там же где и exe файл прогаммы.

<?xml version="1.0" encoding="UTF-8"?>
<responses>
<response>
  <requestNum>525</requestNum>
  <terminalNum>742</terminalNum>
  <auth>
    <payment trn="0000000002"  resultCode="215" timeget="2020-01-10 17:05:19" />
  </auth>
</response>
  <response>
    <requestNum>52</requestNum>
    <terminalNum>74</terminalNum>
    <auth>
      <payment trn="0000000001"  resultCode="215" timeget="2020-01-10 17:05:19" />
    </auth>
  </response>

</responses>

Далее пример чтения данных

 try
            {
                XDocument doc = XDocument.Load("source.xml");
                foreach (XElement element in doc.Element("responses").Elements("response"))
                {
                    XElement requestNum = element.Element("requestNum");
                    XElement terminalNum = element.Element("terminalNum");
                    XElement auth = element.Element("auth").Element("payment");
                    Console.WriteLine("Num={0}: term={1}, auth={2}", requestNum.Value, terminalNum.Value, auth.Attribute("trn").Value);

                }
            }
            catch (XmlException ex)
            {
                Console.WriteLine(ex);
            }
READ ALSO
C#. Объясните смысл преобразования данных [дубликат]

C#. Объясните смысл преобразования данных [дубликат]

Объясните пожалуйста как работает ключевое checked в данном примере, в 1-ом просто выйдет 0 в консоли из-за переполнения, во втором же программа...

84
Как добавить значок сортировки на заголовок ListView используя MVVM

Как добавить значок сортировки на заголовок ListView используя MVVM

Примеров сортировки по столбцам ListView с отображением треугольника в какую сторону идёт сортировка, я нашёл достаточноНо они все подразумевают...

118
Visual Studio C# аналог #pragma mark из Xcode

Visual Studio C# аналог #pragma mark из Xcode

Есть подобный аналог в c#, а то падает читаемость кода при 999+ строк кода

103
Как отловить тап на смартфоне?

Как отловить тап на смартфоне?

Хочу реализовать прыжок по двойному нажатию в определенной областиКак считать первое и следующие нажатие по экрану чтобы проверить что...

107