Страница 1 из 1

Проблема с экранированным символом в IQXML

Добавлено: 21 Сентябрь 2023, 20:37
harry
Наткнулся на некорректную работу парсера , при наличии в тексте экранированного символа &lt; (<)
Есть такой фрагмент XML

Код: Выделить всё

<СведТов КолТов="2" НаимТов="Присыпка детская 30г календула" НалСт="20%" НомСтр="15" ОКЕИ_Тов="796" СтТовБезНДС="31.38" СтТовУчНал="37.66" ЦенаТов="15.69">
				<ИнфПолФХЖ2 Значен="01.08.2027" Идентиф="GDATE"/>
				<ИнфПолФХЖ2 Значен="0" Идентиф="GNVLS"/>
				<ИнфПолФХЖ2 Значен="&lt;>" Идентиф="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 Значен="&lt;&gt;" Идентиф="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 Значен="&lt;>" Идентиф="SERTORG"/>
Не уверен в существовании проблемы.
Добавил Вашу строку в пример парсера tXML (просто субклассинг штатного парсера) для разбора пакета ЭДО и выполнил прогон.
Всё штатно - работает, никаких сбоев или прерываний работы парсера я не наблюдаю ...

P/S: Но нужно смотреть - возможно используется другой способ распарса вложенных списков.

1.jpg
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 как свалил в закат, в хорошем смысле.