1с фатальная ошибка error parsing attribute name

Обновлено: 06.07.2024

Всем привет. Сделал веб-сервис, сделал xdto-пакет: <xs:schema xmlns:tns="; xmlns:xs="; targetNamespace="; attributeFormDefault="unqualified" elementFormDefault="qualified"> Вызываю веб-сервис из SoapUI, передаю туда такой кусочек: Получаю ошибку: <faultstring>Неизвестная ошибка. Ошибка разбора XML: - [6,9] Фатальная ошибка: XML declaration allowed only at the start of the document по причине: Ошибка разбора XML: - [6,9] Фатальная ошибка: XML declaration allowed only at the start of the document</faultstring> А что не так? Какой тогда текст нужно передавать в веб-сервис?

А, первая строчка была лишней:) <soap:Text xml:lang="ru_RU">Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: < - [11,4] Проверка дополнительного свойства: форма: Элемент имя: SHOP по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: < - [11,4] Проверка дополнительного свойства: форма: Элемент имя: SHOP по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: <;

Потому что думаю что моя ошибка очень очевидна и она почти наверняка в моей схеме.

Я сделал фабрикуxdto в 1С, получил на выходе такую строку: <HeaderData xmlns="; xmlns:xs="; xmlns:xsi="; <SHOP>1111</SHOP> Перекинул ее в SoapUI и получил ошибку: <soap:Text xml:lang="ru_RU">Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: < - [12,4] Проверка дополнительного свойства: форма: Элемент имя: < по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: < - [12,4] Проверка дополнительного свойства: форма: Элемент имя: < по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: <;

targetNamespace=";; пространство имен описано в фабрике? И странно что формируемый элемент не содержит корневого узла

Так ты фабрику прокси используешь? Такое бывает если ты используешь вместо Фабрика=Прокси.ФабрикаXdto; Используешь

Ура, из 1С все работает! Но если подставить полученную xml в SoapUI, получается ошибка(

И вы значение присваиваете не атрибуту, а элементу, что тоже является неправильным

Так ругань идет не на валидность, а на ошибку преобразования данных XDTO. Да и если через 1С сделать XDTO и вызвать этот веб-сервис, то все работает.

Теоретически вы можете скормить что угодно, но SOAP UI работает с валидными или хотя бы правильно сформированными XML. Ваш XML не валиден изза отсутствия корневого узла и не правильно сформирован изза того что присвоение значения идет не атрибуту, а элементу. так понятно?

Конечно. Поменял SHOP на атрибут. <xs:schema xmlns:tns="; xmlns:xs="; targetNamespace="; attributeFormDefault="unqualified" elementFormDefault="qualified"> Вот такую XML 1С выдает: <HeaderData xmlns="; xmlns:xs="; xmlns:xsi="; SHOP="1111"/> Вот такую XML в SoapUI вставить? <?xml version="1.0"?> <HeaderData xmlns="; xmlns:xs="; xmlns:xsi="; SHOP="1111"/>

Жесть. <HeaderData xmlns=";; xmlns:xs=";; xmlns:xsi="; </Root> Вот валидный XML, а то что у Вас, это , у меня даже слов нет

<faultstring>Неизвестная ошибка. Ошибка разбора XML: - [6,8] Фатальная ошибка: XML declaration allowed only at the start of the document по причине: Ошибка разбора XML: - [6,8] Фатальная ошибка: XML declaration allowed only at the start of the document</faultstring> <detail/>

А если без <?xml version="1.0"?> , <faultstring>Неизвестная ошибка. Ошибка разбора XML: - [6,18] Фатальная ошибка: error parsing attribute name по причине: Ошибка разбора XML: - [6,18] Фатальная ошибка: error parsing attribute name</faultstring> <detail/>

<?xml version="1.0"?> - описание - Оно обязательно Далее тег Root - Корневой элемент, В вашем случае там идет описание схемы.

Ну господи, я знаю что такое xml. Я подставляю в SoapUI то, что выдает мне 1С. Не нужна там похоже валидная XML, ну вроде понятно же уже.

Посмотри Фиддлером что отправляется в том и ином случае

Ну вы даете! :) То есть вы суете в соап сервис вместо соап-конверта тупо хмл?

А чего тут такого?) 1С ж чует XDTO и даже пытается разбирать.

Ну ты же хочешь не из 1С-а обращаться к сервису? Тут надо хотя бы в принципе представлять что такое SOAP. Можно вики почитать: Хотя странно. SoapUI сам правильно формирует запросы, надо только данные подставить вместо "?" в сгенеренную XML-ку.

То есть чисто теоретически возможно в качестве параметра передать XML?

Я сейчас передаю XML как строку, а на выходе общаюсь с ней как с DOM-объектом. Вариант конечно, но не айс)

А, то есть ты это свою хмл-ку хотя бы внутри соап-конверта передаешь? Тогда надо просто в обернуть. Но это жуткий изврат, передавать хмл внутри хмл. Не надо так.

Да, так и делаю. Буду знать что это называется CDATA:)

Если создашь XML по схеме то и читать можешь тоже по схеме

Так а все-таки, как через SOAP передавать какие-то структурированные данные?

В данной статье речь пойдёт о причинах возникновения фатальной ошибки «Ошибка разбора 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С

Читайте также: