Имя: Пароль:
1C
1С v8
"Extra content at the end of the document" при чтении XML
,
0 Omskdizel
 
23.12.24
13:35
Доброго дня, коллеги!
Возникла следующая ошибка:
Ошибка при вызове метода контекста (Прочитать)
Парсер.Прочитать();
по причине:
Ошибка разбора XML:  - [12151,2]
Фатальная ошибка:
Extra content at the end of the document
SystemId: file://D:/!/Struct.xml


Исходные:
1С 8.3.22.2411, 8.3.22.1709
УТ 10.3.88.3 (обработка торговлю вообще не трогает)
Win10/2k8

Анамнез:
Есть файл XML со структурой типа:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd"> 
<yml_catalog date="2024-12-20 00:26">
 <categories>
 <category id="169133" parentId="7436">Категория 169133</category>
 <category id="174818" parentId="12994">Категория 
 174818</category>
 </categories>


Строк в нем 12150. Код обработки примитивен, как и структура файла:

Парсер = Новый ЧтениеXML;
Парсер.ОткрытьФайл(ПутьКФайлу);
	
Пока Парсер.Прочитать() Цикл
		
	Если Парсер.ТипУзла = ТипУзлаXML.КонецЭлемента И Парсер.Имя = "categories" Тогда
		Прервать;
	КонецЕсли;
		
	Если Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента И Парсер.Имя = "category" Тогда
			
		ИД = Парсер.ЗначениеАтрибута("id");
		Родитель = Парсер.ЗначениеАтрибута("parentId");
		Парсер.Прочитать();
		Наименование = Парсер.Значение;

		С = ТЗ.Добавить();
		С.ИД = ИД;
		С.Родитель = Родитель;
		С.Наименование = Наименование;
			
	КонецЕсли;
		
КонецЦикла;
 
Парсер.Закрыть();


Обратите внимание на номер строки с ошибкой. А теперь главный прикол, если я удаляю хотя бы пару строк, причем в любой части документа, то ошибка не выдается.
Гуглил естественно, не нашел ничего по этому вопросу. Ошибки такие бывали, но они ругались в начале разбора, а у меня в конце.
Подскажите, что делаю не так?
1 Мультук
 
гуру
23.12.24
13:55
(0)

Смотрим сюда и говорим себе.
Наверное какой-то нехороший человек впендюрил в строку "Категория <вот здесь> 174818"
какой-то нехороший символ. Например перенос строки.

Посмотрю как я на эту хрень в hex-редакторе, и если мои (ваши) подозрения верны,
исправлю эту строку в базе, чтобы никаких "плохих символов" там не было

 <category id="169133" parentId="7436">Категория 169133</category>
 <category id="174818" parentId="12994">Категория 
 174818</category>
2 lEvGl
 
гуру
23.12.24
14:05
(0) кривая структура xml, платформа врать не будет
3 Omskdizel
 
23.12.24
14:22
(1)(2) Я, безусловно, проверю. Но обратите внимание на то, что я удалял строки из разных мест обрабатываемого файла. В том числе и ту строку, на которой обработка спотыкалась.
4 Omskdizel
 
23.12.24
14:25
Посмотрел. Нашлись только символы перевода строки.
5 timurhv
 
23.12.24
14:26
(3) Так не удаляйте, пересохраните просто.
6 d4rkmesa
 
23.12.24
14:27
(4) Notepad++ в помощь
7 Omskdizel
 
23.12.24
14:29
(5) Пересохранил через Notepad++, картина та же.
8 Omskdizel
 
23.12.24
14:29
(6) Им и пользуюсь
9 Omskdizel
 
23.12.24
14:35
Ребят, а есть у кого возможность прогнать данные на более старших ветках платформы? Я все скину.
10 Мультук
 
гуру
23.12.24
15:04
(3)

Notepad:
-- ой гляди, какая хрень. XML то невалидный, а юзер то, небось весь в печали...
Удалю-ка я "лишнее".
11 lEvGl
 
гуру
23.12.24
14:48
(9) платформа не при чем, проверьте структуру сами или выложите сокращенный вариант (без массы данных, только чтобы структура была видна, полностью)
12 Omskdizel
 
23.12.24
16:09
(10) У вас не получается в сарказьмь, вам надо еще потренироваться. Ответ, почему не получается, в теме есть.
(11) Нет там особо секретных данных, выкладываю оригинал. Не паковал. https://disk.yandex.ru/d/fZvB5olLL4ol7Q
13 Мультук
 
гуру
23.12.24
16:22
(12)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd"> 
<yml_catalog date="2024-12-20 00:26">
 <categories>
 <category id="169133" parentId="7436">Категория 169133</category>
 <category id="174818" parentId="12994">Категория 
 174818</category>
 </categories>


Вопросов ровно два:
-- должен ли тэг "yml_catalog" закрываться
судя по примеру https://docs.retailrocket.ru/docs/example-of-xml-file  должен.

-- закрывается ли он у вас  (судя по вашему примеру - нет)
14 H A D G E H O G s
 
23.12.24
16:22
В конце нет закрывающего тэга

</yml_catalog>
15 H A D G E H O G s
 
23.12.24
16:27
Даже в примере это есть

https://yandex.ru/support/partnermarket/export/yml.html#yml-format
16 Волшебник
 
23.12.24
16:37
(14)+1
Нарушена структура XML. Правильно так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2024-12-20 00:26">
<categories>
<category id="169133" parentId="7436">Диспенсеры для гигиенических пакетов</category>
...
<category id="184178" parentId="169740">Тубусы</category>
</categories>
</yml_catalog>
17 lEvGl
 
гуру
23.12.24
16:59
(12) данные даром не нужны были, важна была структура, чтобы не копаться в тонне текста, + понять, понимаете ли вы что такое хмл и какую должен иметь структуру

что это за узел такой
<yml_catalog date="2024-12-20 00:26">
... ладно, сказали уже все
18 Omskdizel
 
23.12.24
17:08
(13)(14)(16)(17) Спасибо, ребят! Сбило меня отсутствие переноса на новую строку этого узла и странное поведение при удалении пары других узлов.