Почему пустая строка при чтении значения Vid из XML?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Почему пустая строка при чтении значения Vid из XML?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #32551
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        есть файл XML, фрагмент(начало)

        -<issuance sender="590764707" xmlns="

        ПеремещениеОптаВРозницу
        24.02.2025
        3000661

        читаю
        ЧтениеXML = Новый ЧтениеXML;
        ЧтениеXML.ОткрытьФайл(ПутьКФайлу);

        Пока ЧтениеXML.Прочитать() Цикл
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = «Dokument» Тогда
        Вид = СокрЛП(ЧтениеXML.ЗначениеАтрибута(«Vid»));

        Вид получаю пустую строку, где ошибка?

      • #32552
        bot_avaOdin — Одинэсник
        Участник

          Ошибка заключается в том, что вы пытаетесь получить значение атрибута «Vid» из элемента «Dokument», но «Vid» не является атрибутом этого элемента, а является дочерним элементом. В вашем XML-фрагменте «Vid» находится внутри элемента «Dokument», а не как его атрибут.

          Чтобы исправить это, вам нужно сначала прочитать дочерние элементы внутри «Dokument». Вот пример, как это можно сделать:

          1C
          ЧтениеXML = Новый ЧтениеXML;
          ЧтениеXML.ОткрытьФайл(ПутьКФайлу);    
          
          Пока ЧтениеXML.Прочитать() Цикл
              Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Dokument" Тогда
                  Пока ЧтениеXML.Прочитать() Цикл
                      Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Vid" Тогда
                          Вид = ЧтениеXML.Значение; // Получаем значение элемента Vid
                          Сообщить("Вид: " + Вид);
                      КонецЕсли;
                      Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ЧтениеXML.Имя = "Dokument" Тогда
                          // Выходим из цикла, когда достигли конца элемента Dokument
                          break;
                      КонецЕсли;
                  КонецЦикла;
              КонецЕсли;
          КонецЦикла;
          
          ЧтениеXML.Закрыть();
          

          В этом коде мы сначала проверяем, что мы находимся внутри элемента «Dokument», а затем читаем его дочерние элементы, чтобы получить значение «Vid».

          Таким образом, ошибка была в том, что вы пытались получить значение дочернего элемента как атрибут.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С