16.01.13 — 21:00
Вот таким кодом пробую прочитать ХМЛ
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(адрес);
Пока ЧтениеXML.Прочитать() Цикл
КонеЦЦикла;
Валится при первой же попытке прочитать на
{Форма.Форма.Форма(162)}: Ошибка при вызове метода контекста (Прочитать)
Пока ЧтениеXML.Прочитать() Цикл
по причине:
Ошибка разбора XML: — [3,37]
Фатальная ошибка:
Specification mandate value for attribute addDa琀愀
SystemId: file://»адрес»
Вот сам ХМЛ
<?xml version=»1.0″ encoding=»unicode»?>
<form:Documents xmlns:form=»http://www.abbyy.com/FlexiCapture/Schemas/Export/FormData.xsd» xmlns:addData=»http://www.abbyy.com/FlexiCapture/Schemas/Export/AdditionalFormData.xsd»>
<_Счет-фактура:_Счет-фактура addData:ImagePath=»Счет-фактура_29.11.2012_16.pdf» xmlns:_Счет-фактура=»http://www.abbyy.com/FlexiCapture/Schemas/Export/Счет-фактура.xsd»>
<_Счет-Фактура>
<_DocNum>034</_DocNum>
<_DocDate>2012-11-29</_DocDate>
<_IssCompany>Общество с ограниченной ответственностью</_IssCompany>
<_IssINN>0000</_IssINN>
<_IssKPP>0000</_IssKPP>
<_DesCompany>Общество с ограниченной ответственностью</_DesCompany>
<_DestINN>0000</_DestINN>
<_DestKPP>0000</_DestKPP>
<_Barcode/>
<_FilePathName>0000</_FilePathName>
</_Счет-Фактура>
</_Счет-фактура:_Счет-фактура>
</form:Documents>
1 — 16.01.13 — 21:01
сам хмл в ИЕ открывается отлично
2 — 16.01.13 — 21:03
валится на второй попытке прочитать
3 — 16.01.13 — 21:07
удалил «addData:ImagePath=»Счет-фактура_29.11.2012_16.pdf»»
стал валится на следующем атрибуте «xmlns:_Счет-фактура=»http://www.abbyy.com/FlexiCapture/Schemas/Export/Счет-фактура.xsd»»
{Форма.Форма.Форма(162)}: Ошибка при вызове метода контекста (Прочитать)
Пока ЧтениеXML.Прочитать() Цикл
по причине:
Ошибка разбора XML: — [3,35]
Фатальная ошибка:
Specification mandate value for attribute xmlns
SystemId: file:////test1/IGabdrakhmanov/Счет-фактура_29.11.2012_16.xml
4 — 16.01.13 — 21:07
что это? косяк подготовки в хмл в стороннем ПО?
5 — 16.01.13 — 21:19
А каково содержание файла «Счет-фактура.xsd»? Ощущение, что какого-то параметра не хватает.
6 — 16.01.13 — 21:23
(5) хм. а как узнать содержание этого файла?
7 — 16.01.13 — 21:31
(6) Не обращай внимание на (5). Бред я там написал 🙁
8 — 16.01.13 — 21:32
(6) м.б. какие-то символы есть в этих строках, которые раньше узел закрывают ?
9 — 16.01.13 — 21:35
(0) А что внутри цикла? Как вы узлы считываете?
10 — 16.01.13 — 21:36
оставил файл таким
<?xml version=»1.0″ encoding=»unicode»?>
<form>
<_Счет-фактура>
<_Счет-Фактура>
<_DocNum>034</_DocNum>
<_DocDate>2012-11-29</_DocDate>
<_IssCompany>Общество с ограниченной ответственностью</_IssCompany>
<_IssINN>0000</_IssINN>
<_IssKPP>0000</_IssKPP>
<_DesCompany>Общество с ограниченной ответственностью</_DesCompany>
<_DestINN>0000</_DestINN>
<_DestKPP>0000</_DestKPP>
<_Barcode/>
<_FilePathName>0000</_FilePathName>
</_Счет-Фактура>
</_Счет-фактура>
</form>
теперь валится на
{Форма.Форма.Форма(176)}: Ошибка при вызове метода контекста (Прочитать)
Пока ЧтениеXML.Прочитать() Цикл
по причине:
Ошибка разбора XML: — [10,9]
Фатальная ошибка:
error parsing attribute name
SystemId: file://»адрес»
11 — 16.01.13 — 21:36
(9) ничего. просто прочитать узел за узлом
12 — 16.01.13 — 21:41
(11) попробуйте посмотреть, хоть в коде типовой, как это происходит.
У объекта ЧтениеXML много разных методов и свойств, одно из них значение, это как раз то куда выводятся значения узлов.
А у вас они куда выводятся? 🙂
В том виде как у вас ничего и не будет, кроме ошибок.
13 — 16.01.13 — 21:43
(12) для с чего это. у меня просто читаются узлы. самый простой код
14 — 16.01.13 — 21:43
валидатор на http://www.w3schools.com/xml/xml_validator.asp говорит
This page contains the following errors:
error on line 3 at column 181: xmlns:_?????°????????????_???????µ??: ‘http://www.abbyy.com/FlexiCapture/Schemas/Export/?????°????????????_???????µ??.xsd’ is not a valid URI
15 — 16.01.13 — 21:47
фак. придется завтра поставщика файлов мучить. а до завтра курить бамбук
16 — 16.01.13 — 21:50
может есть какой-нить форум фанатов ХМЛ?
17 — 16.01.13 — 21:51
Мож кодировку у ЧтенияXML поставить, хотя наврятли поможет
18 — 16.01.13 — 21:52
Вопрос: браузером xml открывает?
19 — 16.01.13 — 21:53
Посмотрел в Юникоде 琀愀 — символы китайского алфавита… или японского кто их разберёт. Если браузер тоже не открывает, попробуй удалить <?xml version=»1.0″ encoding=»unicode»?>
20 — 16.01.13 — 21:55
Вроде прочитал у меня (что он там начитал уже другой вопрос)
21 — 16.01.13 — 22:00
в браузере ИЕ открывается
22 — 16.01.13 — 22:05
В итоге помогло следующее:
Взять xml представленный в первом сообщении, кроме строки «<?xml version=»1.0″ encoding=»unicode»?>», сохранить с помощью блокнота в кодировке UTF-8.
23 — 16.01.13 — 22:13
(22) спасибо!!!
заменил строчку на <?xml version=»1.0″ encoding=»UTF-8″?> и пересохранил в формате UTF-8
Нуф-Нуф
24 — 16.01.13 — 22:24
Всем большое спасибо за помощь!
Сейчас меня спас код
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(адрес);
СтрокаТекста = Текст.ПолучитьТекст();
СтрокаТекста = СтрЗаменить(СтрокаТекста,»unicode», «UTF-8»);
Текст.УстановитьТекст(СтрокаТекста);
Текст.Записать(адрес, КодировкаТекста.UTF8);
Сvотри что бы тег не содержал запрещенных символов (не должен начинаться с цифры и т.д.)
Установившаяся Практика Именования
Делайте имена описательными. Имена с символом подчеркивания выглядят аккуратно: <first_name>, <last_name>.
Имена должны быть короткими и простыми, например: <book_title> а не: <the_title_of_the_book>.
Избегайте символов «-«. Если вы называете xml-элемент, используя дефис («first-name,») некоторые компьютерные программы могут решить, что вы хотите вычесть значение name из значения first.
Избегайте символов «.». Если вы называете что-нибудь например так: «first.name,» некоторые программы могут решить, что «name» является свойством объекта «first.»
Старайтесь не использовать символы «:». Двоеточие зарезервировано для использования в так называемых пространствах имен (подробнее о них будет рассказано позже).
XML документы часто имеют соответствующую базу данных. Обычно используют правила именования этой базы данных для элементов XML документов.
Не английские буквы, такие как ���, вполне допустимы в XML, но следите за тем, чтобы не было проблем совместимости, если ваш производитель программного обеспечения не поддерживает их.
Добавлено через 1 минуту
Правила Именования в XML
Элементы XML должны следовать следующим правилам именования:
Имена могут состоять из букв, чисел, и других символов
Имена не могут начинаться с числа или знака препинания
Имена не могут начинаться с букв xml (или XML, или Xml, и т.п.)
Имена не могут содержать пробелы
Любое имя может использоваться, зарезервированных слов нет.
Содержание:
1. XML – расширяемый язык разметки
2. Устранение Ошибки разбора XML в 1С
3. «Обход» Ошибки разбора XML в 1С
1. XML – расширяемый язык разметки
В данной статье речь пойдёт о причинах возникновения фатальной ошибки «Ошибка разбора XML» и способах устранения данной неполадки. Также будет дана инструкция не по устранению, но «обходу» ошибки, то есть действиям на опережение.
XML (с английского – extensible markup language – расширяемый язык разметки) – это язык разметки, который рекомендует Консорциум Всемирной паутины. Обычно язык разметки XML служит для описания документации, соответствующего типа, а также описывает действия соответствующих процессоров. Расширяемый язык разметки имеет довольно простой синтаксис, поэтому используется по всему миру, чтобы создавать и обрабатывать документацию программным способом. Он создавался именно для использования в Интернете. XML назвали именно расширяемым языком разметки, так как в нём нет фиксации разметки, которая содержится внутри документа, а именно: программист может создавать любую разметку, а ограничения будут встречаться лишь в синтаксисе.
2. Устранение Ошибки разбора XML в 1С
«Ошибка разбора XML» возникает исключительно в тонком клиенте 1С. Также стоит отметить, что «Ошибка разбора XML» также довольна схожа с ошибкой по формату потока, которая возникает в толстом клиенте. Обычно в 1С «Ошибка разбора XML» возникает по причине наличия кэша метаданных. И если очистить кэш, то ошибка будет устранена. Выглядит окно с ошибкой, а также окно с комментариями от технической поддержки следующим образом:
Рис. 1 Окно Ошибки разбора XML в 1С
XML данные читаются по потокам, так что в каждый из моментов времени объект «сосредоточен» в некотором узле XML. Из-за этого также может возникать фатальная ошибка «Ошибка разбора XML». Для того чтобы её устранить, можно вызвать функцию «ИсключениеЧтенияXml», как показано на скриншоте примера ниже:
Рис. 2 Вызов функции ИсключениеЧтенияXML для устранения Ошибки разбора XML в 1С
3. «Обход» Ошибки разбора XML в 1С
Данные два способа (очистка кэша метаданных и функция «ИсключениеЧтенияXml») – не все возможные варианты устранения ошибки разбора XML. Далее рассмотрим нестандартный подход, который позволит избежать ошибки еще до её возникновения.
Для наглядности будем работать в конфигурации 1С:Бухгалтерия предприятия, одной из наиболее распространенных программ фирмы 1С. У многих людей, которые пользуются программой 1С:Отчётность появляются неполадки при попытках открыть данные/файлы от налоговой. Чтобы открыть такой файл повторяем следующие действия:
· Переходим по пути: «Настройки 1С:Отчётности → Журнал обмена с контролирующими органами», как показано на скриншоте ниже:
Рис. 3 Настройка 1С Отчетности
· Далее кликаем на «Запросы» и выделяем ту выписку, которую не было возможности открыть из-за ошибки, как продемонстрировано на скриншоте ниже:
Рис. 4 Выбор выписки с Ошибкой разбора XML в 1С
· Обращаем внимание на стадию отправки, которая располагается внизу этого сообщения, и кликаем два раза на зелёный круг:
Рис. 5 Стадия отправки документа с Ошибкой разбора XML в 1С
· Появляется транспортное сообщение, в нём кликаем на «Выгрузить» и выбираем папку, куда необходимо провести выгрузку, после чего сохраняем данный файл. Пробуем открыть его, при помощи любого из графических редакторов, который может поддерживать формат PDF, как показано на скриншоте ниже:
Рис. 6 Результат обхода Ошибки разбора XML в 1С
· Всё успешно открылось, а ошибка даже не успела возникнуть.
Специалист компании «Кодерлайн»
Айдар Фархутдинов
Грабли метода ПрочитатьXML() объекта ФабрикаXDTO
Что таит в себе окно редактирования XDTO-пакета
Фабрика XDTO — это библиотека типов, которая описывает определенные структуры XML. В языке программирования платформы 1С имеется объект ФабрикаXDTO, который содержит все пакеты XDTO, имеющиеся в конфигурации, а также предопределенные пакеты (например, пакет типов XML схемы). У данного объекта метод ПрочитатьXML(), позволяет читать элементы данных XDTO указанного типа из объекта чтения XML:
ФайлXML = Новый ЧтениеXML;
ФайлXML.УстановитьСтроку(СтрокаXML);
Пока ФайлXML.Прочитать() Цикл
Если ФайлXML.ЛокальноеИмя = "Message" И ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ФайлXML);
КонецЕсли;
КонецЦикла;
ФайлXML.Закрыть();
Первый параметр метода является обязательным, в который передается объект чтения XML. Второй параметр метода необязательный, в который передается тип элемента данных XDTO. Если тип не указан, то будет сделана попытка определить тип данных по текущему состоянию объекта ЧтениеXML.
Допустим, создадим тип в пакете XDTO с пространством имен http://lk.1cps.ru, который будет описывать некую структуру XML:
![]() |
| 1. Тип «Документы» |
Кусок структуры XML:
...
<Документы>
<РасчетФБ>
<Культура>12122</Культура>
<ПосевнаяПлощадь>23</ПосевнаяПлощадь>
<СтавкаСубсидий>12</СтавкаСубсидий>
<Сумма>276</Сумма>
</РасчетФБ>
<РасчетФБ>
<Культура>232323</Культура>
<ПосевнаяПлощадь>34</ПосевнаяПлощадь>
<СтавкаСубсидий>12</СтавкаСубсидий>
<Сумма>408</Сумма>
</РасчетФБ>
</Документы>
...
Прочитаем эту структуру:
Пока ФайлXML.Прочитать() Цикл
Если ФайлXML.ЛокальноеИмя = "Документы" И ФайлXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ФайлXML, ФабрикаXDTO.Тип("http://lk.1cps.ru", "ДокументыТип"));
Прервать;
КонецЕсли;
КонецЦикла;
Приведенный код будет завершать ошибкой чтения XML, примерно такой:
Ошибка при вызове метода контекста (ПрочитатьXML)
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ФайлXML, ФабрикаXDTO.Тип("http://lk.1cps.ru", "ДокументыТип"));
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://lk.1cps.ru}ДокументыТип - [126,19]
Проверка дополнительного свойства:
форма: Элемент
имя: {http://lk.1cps.ru}Культура
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://lk.1cps.ru}ДокументыТип
ПРОШЛО 4 ЧАСА 🙁
Так как выше приведенный кусок структуры XML не относится к пространству имен http://lk.1cps.ru, то и метод ПрочитатьXML() выкидывал ошибку, несмотря на то, что тип правильно описывает структуру XML! Поэтому XML должен выглядеть так:
...
<Документы xmlns="http://lk.1cps.ru">
<РасчетФБ>
<Культура>12122</Культура>
<ПосевнаяПлощадь>23</ПосевнаяПлощадь>
<СтавкаСубсидий>12</СтавкаСубсидий>
<Сумма>276</Сумма>
</РасчетФБ>
<РасчетФБ>
<Культура>232323</Культура>
<ПосевнаяПлощадь>34</ПосевнаяПлощадь>
<СтавкаСубсидий>12</СтавкаСубсидий>
<Сумма>408</Сумма>
</РасчетФБ>
</Документы>
...
Вот такие пироги.
|
1С 8.3.9.1850 Суть проблемы: пытаюсь сделать импорт товаров из сайта в 1С через модуль в пункте «Помощник импорта товаров с сайта под управлением CMS 1C-Битрикс». Сначала идет получение XML-данных (норм), потом при анализе XML-данных выдает: «{Обработка.Б_ПомощникИмпортаТоваровБитрикс.МодульОбъекта(102)}: Ошибка при вызове метода контекста (Прочитать): Ошибка разбора XML: — [2,8] В админке на сайте в «Интеграция с 1С» в пункте Экспорт поставил инфоблок каталога — свой каталог (который нужно выгрузить). Выгрузка администраторам разрешена. |
|
|
Написано почти русским языком «error parsing attribute name». Поставьте точку останова по ошибке в 1С и отловите, этот момент. Или сделайте вывод сообщения, чтобы понять на какой позиции ошибка. |
|
|
Пользователь 2005837 Заглянувший Сообщений: 13 |
#3 17.05.2018 10:02:54
Спасибо за подсказку, но у меня на сайте один товар, который я создал вручную. Естественно, никаких там «спецсимволов» и прочего нет и быть не может, так как писал вручную. Причем сначала на русском, а сейчас проверил еще и на английском. Одна и та же ошибка. |
||
|
Я даже попробовал создать товар с названием и характеристиками, состоящими только из цифр — все равно выдает ошибку при парсинге. |
|
|
Есть предположение, что может быть проблема в кодировке отдаваемого потока от сайта. Т.е. сайт возвращает текст в кодировке, которую не может распознать 1с. Отсюда (почти в самом начале) есть какие-то неразборные данные. Вам нужно через отладчик посмотреть сам xml, либо попробовать получить этот же xml в браузере, т.е. послать команды авторизации checkauth, инициализации init и запроса данных с сайта query и посмотреть, что выдаст сайт. Всем несогласным — мыло и веревка! |
|
|
Пользователь 2005837 Заглянувший Сообщений: 13 |
#6 17.05.2018 13:46:46
Вы можете, пожалуйста, подробнее объяснить как посмотреть этот xml через отладчик (хотя бы вкратце, а я погуглю), или как посмотреть xml в браузере? Спасибо! |
||
|
ваш сайт/bitrix/admin/1c_exchange.php?type=get_catalog&mode=checkauth в ответ будет «success PHPSESSID Айди сессии» ваш сайт/bitrix/admin/1c_exchange.php?type=get_catalog&mode=query в ответ будет нужная вам информация. здесь и проверьте кодировку. Всем несогласным — мыло и веревка! |
|
|
Пользователь 2005837 Заглянувший Сообщений: 13 |
#8 17.05.2018 15:49:53
ID сессии получил, но второй запрос выдает пустую страницу |
||
|
Пользователь 2005837 Заглянувший Сообщений: 13 |
#9 17.05.2018 15:50:12
ID сессии получил, но второй запрос выдает пустую страницу UPD: так, я понял, я еще INIT не делал. Сейчас сделал, в итоге mode=query выдал страницу |
||
|
Итак, сделал все три запроса, в конце получил вот это: Какой вывод я должен теперь сделать? Единственное, что тут не заполнено, это параметр BASE почему-то, что это значит? |
|
|
Сложно так заочно что-то сказать. Надо подключаться и смотреть. Если что пишите. Да, насчет отладки, чтобы остановка сработала на ошибке, сделайте вот так: https://ut11-bitrix.ru/faq-1c/1s-rezhim-otladki-fonovykh-zadaniy/ Сейчас обмен, как фоновое задание с ним уже сложнее работать стало. |
|
|
Олег Корчагин,скорее всего нужно смотреть, что именно в 1с получается… Потому что там могут быть просто кракозябры Всем несогласным — мыло и веревка! |
|
|
Пользователь 2005837 Заглянувший Сообщений: 13 |
#13 18.05.2018 10:28:42
Все сделал по пунктам, ничего не изменилось вообще. Опять дошло до ошибки и все.
Как смотреть? |
||||
|
Олег Корчагин, есть участок кода до парсинга. Там формируется список xml. Вот эти xml и посмотреть нужно в конфигурации в меню отладка — вычислить выражение и смотреть, что с xml…нужная ли кодировка отображается… Всем несогласным — мыло и веревка! |
|
|
Пользователь 2005837 Заглянувший Сообщений: 13 |
#15 31.05.2018 16:41:16 С проблемой разобрался… Ну, как, вернее… Переустановил весь битрикс и шаблон в кодировке UTF-8 — и интеграция заработала без фатальных ошибок. /close |
Вот таким кодом пробую прочитать ХМЛ Валится при первой же попытке прочитать на {Форма.Форма.Форма}: Ошибка при вызове метода контекста (Прочитать) по причине: Ошибка разбора XML: — [3,37] Фатальная ошибка: Specification mandate value for attribute addDa琀愀 Вот сам ХМЛ
сам хмл в ИЕ открывается отлично
валится на второй попытке прочитать
стал валится на следующем атрибуте «xmlns:_Счет-фактура=»http://www.abbyy.com/FlexiCapture/Schemas/Export/Счет-фактура.xsd»» {Форма.Форма.Форма}: Ошибка при вызове метода контекста (Прочитать) по причине: Ошибка разбора XML: — [3,35] Фатальная ошибка: Specification mandate value for attribute xmlns SystemId: file:////test1/IGabdrakhmanov/Счет-фактура_29.11.2012_16.xml
что это? косяк подготовки в хмл в стороннем ПО?
А каково содержание файла «Счет-фактура.xsd»? Ощущение, что какого-то параметра не хватает.
хм. а как узнать содержание этого файла?
Не обращай внимание на . Бред я там написал 🙁
м.б. какие-то символы есть в этих строках, которые раньше узел закрывают ?
А что внутри цикла? Как вы узлы считываете?
оставил файл таким теперь валится на {Форма.Форма.Форма}: Ошибка при вызове метода контекста (Прочитать) по причине: Ошибка разбора XML: — [10,9] Фатальная ошибка: error parsing attribute name SystemId: file://»адрес»
ничего. просто прочитать узел за узлом
попробуйте посмотреть, хоть в коде типовой, как это происходит. У объекта ЧтениеXML много разных методов и свойств, одно из них значение, это как раз то куда выводятся значения узлов. А у вас они куда выводятся? 🙂 В том виде как у вас ничего и не будет, кроме ошибок.
для с чего это. у меня просто читаются узлы. самый простой код
валидатор на говорит This page contains the following errors: error on line 3 at column 181: xmlns:_?????°????????????_???????µ??: » is not a valid URI
фак. придется завтра поставщика файлов мучить. а до завтра курить бамбук
может есть какой-нить форум фанатов ХМЛ?
Мож кодировку у ЧтенияXML поставить, хотя наврятли поможет
Вопрос: браузером xml открывает?
Посмотрел в Юникоде 琀愀 — символы китайского алфавита… или японского кто их разберёт. Если браузер тоже не открывает, попробуй удалить <?xml version=»1.0″ encoding=»unicode»?>
Вроде прочитал у меня (что он там начитал уже другой вопрос)
в браузере ИЕ открывается
В итоге помогло следующее: Взять xml представленный в первом сообщении, кроме строки «<?xml version=»1.0″ encoding=»unicode»?>», сохранить с помощью блокнота в кодировке UTF-8.
спасибо!!! заменил строчку на <?xml version=»1.0″ encoding=»UTF-8″?> и пересохранил в формате UTF-8
Всем большое спасибо за помощь! Сейчас меня спас код
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
