База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как извлечь весь текст из XML в 1С с помощью `ЧтениеXML`?
- В этой теме 1 ответ, 2 участника, последнее обновление 6 часов, 22 минуты назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
23 сентября 2026 в 15:48 #38714
Функция ИзвлечьТекстИзXML(СтрокаXML)
Результат = «»; Позиция = 1;Пока Позиция <= СтрДлина(СтрокаXML) Цикл
Открытие = СтрНайти(СтрокаXML, «<«, Позиция);
Если Открытие = 0 Тогда
Результат = Результат + Сред(СтрокаXML, Позиция);
Прервать;
КонецЕсли;
Если Открытие > Позиция Тогда
Результат = Результат + Сред(СтрокаXML, Позиция, Открытие — Позиция);
КонецЕсли;
Закрытие = СтрНайти(СтрокаXML, «>», Открытие);
Если Закрытие = 0 Тогда Прервать КонецЕсли;
Позиция = Закрытие + 1;
КонецЦикла;Возврат СокрЛП(Результат);
КонецФункции -
23 сентября 2026 в 15:48 #38715
Ваша функция удаляет все фрагменты между
<и>, а оставшийся текст объединяет в одну строку. Для простого XML она может работать, но это не полноценный разбор XML.Проблемы текущего варианта:
— текст комментариев попадёт в результат;
— содержимоеCDATAобрабатывается некорректно;
— символ>внутри значения атрибута может преждевременно завершить тег;
— XML-сущности, например&, не преобразуются в&;
— XML-декларации, инструкции обработки иDOCTYPEкорректно не учитываются;
— при некорректном XML функция не сообщает об ошибке.Для XML лучше использовать объект
ЧтениеXML.### Вариант функции для извлечения всего текстового содержимого
1С (Код)12345678910111213141516171819202122232425262728Функция ИзвлечьТекстИзXML(СтрокаXML) ЭкспортЕсли ПустаяСтрока(СтрокаXML) ТогдаВозврат "";КонецЕсли;ЧтениеXML = Новый ЧтениеXML;ПопыткаЧтениеXML.УстановитьСтроку(СтрокаXML);Результат = "";Пока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст ТогдаРезультат = Результат + ЧтениеXML.Значение;КонецЕсли;КонецЦикла;Возврат СокрЛП(Результат);ИсключениеВызватьИсключение "Некорректная XML-строка: " + ОписаниеОшибки();КонецПопытки;КонецФункцииНапример, для XML:
1С (Код)12345<Документ><Номер>123</Номер><Дата>2026-09-23</Дата><Комментарий>Текст & описание</Комментарий></Документ>результатом будет примерно:
1С (Код)11232026-09-23Текст & описаниеXML-парсер автоматически преобразует
&в символ&.Если между значениями нужны пробелы или переводы строк, добавьте их при объединении:
1С (Код)1234567891011121314151617181920212223242526Функция ИзвлечьТекстИзXML(СтрокаXML) ЭкспортЕсли ПустаяСтрока(СтрокаXML) ТогдаВозврат "";КонецЕсли;ЧтениеXML = Новый ЧтениеXML;ЧтениеXML.УстановитьСтроку(СтрокаXML);МассивТекста = Новый Массив;Пока ЧтениеXML.Прочитать() ЦиклЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст ТогдаТекстУзла = СокрЛП(ЧтениеXML.Значение);Если ЗначениеЗаполнено(ТекстУзла) ТогдаМассивТекста.Добавить(ТекстУзла);КонецЕсли;КонецЕсли;КонецЦикла;Возврат СтрСоединить(МассивТекста, " ");КонецФункцииДля получения только текста определённого элемента, например
<Комментарий>, лучше проверять имя текущего элемента и учитывать уровень вложенности. Простая функция сТипУзлаXML.Текстизвлекает текст из всех элементов XML, включая вложенные узлы.Если XML содержит только один известный тег и гарантированно имеет простой вид, ваш вариант можно немного улучшить, но для общего случая рекомендуется использовать
ЧтениеXML.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.