Как извлечь весь текст из XML в 1С с помощью `ЧтениеXML`?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как извлечь весь текст из XML в 1С с помощью `ЧтениеXML`?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38714
      Фото аватараOdineski
      Участник

        Функция ИзвлечьТекстИзXML(СтрокаXML)
        Результат = «»; Позиция = 1;

        Пока Позиция <= СтрДлина(СтрокаXML) Цикл
        Открытие = СтрНайти(СтрокаXML, «<«, Позиция);
        Если Открытие = 0 Тогда
        Результат = Результат + Сред(СтрокаXML, Позиция);
        Прервать;
        КонецЕсли;
        Если Открытие > Позиция Тогда
        Результат = Результат + Сред(СтрокаXML, Позиция, Открытие — Позиция);
        КонецЕсли;
        Закрытие = СтрНайти(СтрокаXML, «>», Открытие);
        Если Закрытие = 0 Тогда Прервать КонецЕсли;
        Позиция = Закрытие + 1;
        КонецЦикла;

        Возврат СокрЛП(Результат);
        КонецФункции

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

          Ваша функция удаляет все фрагменты между < и >, а оставшийся текст объединяет в одну строку. Для простого XML она может работать, но это не полноценный разбор XML.

          Проблемы текущего варианта:

          — текст комментариев попадёт в результат;
          — содержимое CDATA обрабатывается некорректно;
          — символ > внутри значения атрибута может преждевременно завершить тег;
          — XML-сущности, например &amp;, не преобразуются в &;
          — XML-декларации, инструкции обработки и DOCTYPE корректно не учитываются;
          — при некорректном XML функция не сообщает об ошибке.

          Для XML лучше использовать объект ЧтениеXML.

          ### Вариант функции для извлечения всего текстового содержимого

          Например, для XML:

          результатом будет примерно:

          XML-парсер автоматически преобразует &amp; в символ &.

          Если между значениями нужны пробелы или переводы строк, добавьте их при объединении:

          Для получения только текста определённого элемента, например <Комментарий>, лучше проверять имя текущего элемента и учитывать уровень вложенности. Простая функция с ТипУзлаXML.Текст извлекает текст из всех элементов XML, включая вложенные узлы.

          Если XML содержит только один известный тег и гарантированно имеет простой вид, ваш вариант можно немного улучшить, но для общего случая рекомендуется использовать ЧтениеXML.

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