Страница 1 из 1
Проблема с экранированным символом в IQXML
Добавлено: 21 Сентябрь 2023, 20:37
harry
Наткнулся на некорректную работу парсера , при наличии в тексте экранированного символа < (<)
Есть такой фрагмент XML
Код: Выделить всё
<СведТов КолТов="2" НаимТов="Присыпка детская 30г календула" НалСт="20%" НомСтр="15" ОКЕИ_Тов="796" СтТовБезНДС="31.38" СтТовУчНал="37.66" ЦенаТов="15.69">
<ИнфПолФХЖ2 Значен="01.08.2027" Идентиф="GDATE"/>
<ИнфПолФХЖ2 Значен="0" Идентиф="GNVLS"/>
<ИнфПолФХЖ2 Значен="<>" Идентиф="SERTORG"/>
<ИнфПолФХЖ2 Значен="Сертификат соответствия" Идентиф="SERTTIP"/>
</СведТов>
и такой код на кларионе
Код: Выделить всё
IF ~xml:FindNextNode('СведТов','ИнфПолФХЖ2')
Ret# = Xml:loadQueue(AdditionalInfos,0,1)
end
На выходе, в очередь AdditionalInfos заливаются первые 3 строки ИнфПолФХЖ2 , т.е. встретив экранированный символ, парсер дальше не идет
Никто не сталкивался ? Как то лечится ?
Проблема с экранированныи символом в IQXML
Добавлено: 21 Сентябрь 2023, 21:43
kreator
Проблема с экранированныи символом в IQXML
Добавлено: 21 Сентябрь 2023, 22:29
harry
viewtopic.php?p=43548#p43548.
Не понял, что именно имелось в виду. Переход на другой парсер ?
Только мне подумалось, а корректен ли такой XML ? Символ ">" - тоже , наверно, должен быть экранирован ?
И в таком виде все работает
Код: Выделить всё
<ИнфПолФХЖ2 Значен="<>" Идентиф="SERTORG"/>
Проблема с экранированным символом в IQXML
Добавлено: 22 Сентябрь 2023, 2:33
Admin
harry писал(а): ↑21 Сентябрь 2023, 22:29
Переход на другой парсер ?
Да. Если будете продолжать работать с Clarion запланируйте переход на другой парсер/генератор XML
По текущей проблеме, как вариант предварительно загрузить XML как текст и поменять проблемные места на пробел. Если важны символы то менять на что то типа @@LT @@GT потом парсить в iQxml и возвращать @@LT @@GT обратно в нормальные символы.
Проблема с экранированным символом в IQXML
Добавлено: 23 Сентябрь 2023, 20:06
Игорь Столяров
harry писал(а): ↑21 Сентябрь 2023, 20:37
<ИнфПолФХЖ2 Значен="<>" Идентиф="SERTORG"/>
Не уверен в существовании проблемы.
Добавил Вашу строку в пример парсера tXML (просто субклассинг штатного парсера) для разбора пакета ЭДО и выполнил прогон.
Всё штатно - работает, никаких сбоев или прерываний работы парсера я не наблюдаю ...
P/S: Но нужно смотреть - возможно используется другой способ распарса вложенных списков.
- 1.jpg (12.51 КБ) 1454 просмотра
Проблема с экранированным символом в IQXML
Добавлено: 23 Сентябрь 2023, 20:18
harry
Значит, все таки это проблема конкретного парсера IQXML. Однако, странно почему символ «<« экранирован, а «>» нет, но это уже другой вопрос
Кстати, саму эту строку у меня тоже парсит, но не переходит к следующей (из исходного примера). У Вас переходит?
Проблема с экранированным символом в IQXML
Добавлено: 23 Сентябрь 2023, 20:24
Игорь Столяров
harry писал(а): ↑23 Сентябрь 2023, 20:18У Вас переходит?
Игорь Столяров писал(а): ↑23 Сентябрь 2023, 20:06
Всё штатно - работает, никаких сбоев или прерываний работы парсера я не наблюдаю ...
P/S: Но нужно смотреть - возможно используется другой способ распарса вложенных списков
Проблема с экранированным символом в IQXML
Добавлено: 23 Сентябрь 2023, 20:28
Игорь Столяров
harry писал(а): ↑23 Сентябрь 2023, 20:18
Однако, странно почему символ «<« экранирован, а «>» нет
Я проверил в Microsoft EDGE и XML Notepad - указанная Вами строка является корректной и везде правильно парсится.
В т.ч. и штатным парсером. Насчёт iqXML - попробуйте обратится к автору, в своё время он мне крови попил изрядно.
Проблема с экранированным символом в IQXML
Добавлено: 23 Сентябрь 2023, 22:58
Дед Пахом
Игорь Столяров писал(а): ↑23 Сентябрь 2023, 20:28
Насчёт iqXML - попробуйте обратится к автору
Он лет 10 как свалил в закат, в хорошем смысле.