Как исправить ошибку в структуре xml

В данной главе приведены некоторые практические приемы работы с XML-файлами.

Исправление невалидных XML-файлов¶

Если по каким-то причинам между тегами оказывается символ < или лбой другой управляющий символ (подробнее смотрите Таблица I.1 — Сущности), то при синтаксическом анализе XML-файла возникнет ошибка «Невалидный XML».

Исправляется данная проблема просто — данные символы необходимо заменить на их сущности (подробнее смотрите раздел Сущности). Сделать это можно, воспользовавшись любым нормальным текстовым редактором с функцией поиска и замены с использованием регулярных выражений.

Примечание

Сообщение о невалидности XML-файла может возникать если после закрывающего родительского тега (см. раздел parrent-tag) находится еще какой-либо текст. В данном случае достаточно удалить все, что идет после закрывающего родительского тега.

Также можно воспользоваться скриптом xml_healer.py, который автоматически заменяет управляющие символы на их сущности и удаляет лишние символы после закрывающего родительского тега. Подробная инструкция по работе со скриптом приведена в главе IV. Скрипт для замены служебных символов в XML.

Удаление лишних блоков(абзацев) из XML по заданному условию¶

Теги в структуре XML образуют многострочные блоки. Иногда возникает необходимость удалить ряд целых блоков по заданному условию. В качестве примера будет рассмотрена ситуация с отчетом по НДС.

Для передачи налоговой отчетности по ТКС в контролирующие органы используется XML. Весь учет ведется в одних программах (например, в 1С), затем выгружается из них в xml формате и отправляется по ТКС непосредственно в контролирующие органы.

Из-за несовершенства некоторых программ, периодически возникают проблемы при передаче файлов в контролирующие органы.

Суть проблемы¶

Согласно приказу ФНС от 29 октября 2014 г. N ММВ-7-3/558@ в Книге продаж элемент <СвПокуп> (Сведения о покупателе, его ИНН/КПП) является необязательным, другими словами он может полностью отсутствовать.

Отрывок книги продаж выглядит следующим образом:

<КнПродСтр НомерПор="134" НомСчФПрод="11444" ДатаСчФПрод="27.11.2014" СтоимПродСФ="397917.28" СтоимПродСФ0="397917.28">
    <КодВидОпер>01</КодВидОпер>
    <СвПокуп>
        <СведЮЛ ИННЮЛ="0190670940" КПП="000000000"/>
    </СвПокуп>
</КнПродСтр>
<КнПродСтр НомерПор="135" НомСчФПрод="2332838" ДатаСчФПрод="23.10.2014" СтоимПродСФ="6790000.00" СумНДССФ18="603389.90">
    <КодВидОпер>02</КодВидОпер>
    <СвПокуп>
        <СведЮЛ ИННЮЛ="7743596506" КПП="774301001"/>
    </СвПокуп>
</КнПродСтр>

А нижеприведенный блок в Книге продаж необязателен:

<СвПокуп>
        <СведЮЛ ИННЮЛ="7743596506" КПП="774301001"/>
</СвПокуп>

Если есть сделки с иностранными контрагентами, у которых нет ИНН/КПП, следовательно, сведения о покупателе не заполняются. Но из-за логической ошибки в программе бухгалтерского учета, выгрузка сформированного отчета была невозможна, так как программа ошибочно требовала указать ИНН/КПП для всех контрагентов.

Чтобы обойти эту ошибку пришлось вместо ИНН указать регистрационный номер контрагента в стране регистрации, а вместо КПП указать девять нулей.

Но при попытке отравить выгруженный отчет в контролирующий орган, возникала обратная ошибка. Так как ИНН и КПП были фиктивными, то при проверке отчета не выполнялись контрольные соотношения.

Проверка файла отчета программой Tester

Проверка файла отчета программой Tester

Примечание

ИНН и КПП это не произвольный набор чисел, они содержат определенные контрольные соотношения.

Теперь следовало вручную исправить XML файл отчета и удалить лишние блоки с фиктивными данными.

Решение проблемы¶

Так как файл содержал свыше 15000 строк и большое количество сделок, надо было автоматизировать данный процесс.

С помощью запроса Xpath и сервиса Xpath-Tester были найдены все сделки с иностранными контрагентами. Запрос имел
вид //СвПокуп[СведЮЛ[@КПП0"000000000"]]. Получилось приличное количество сделок, свыше 200.

Запрос Xpath

Надо было удалить порядка 700 строк, полностью содержащих блоки (причем
с разными псевдо-ИНН):

<СвПокуп>
    <СведЮЛ ИННЮЛ="0291265150" КПП="000000000"/>
</СвПокуп>

Большинство программ умеет искать и заменять максимум одну строку на
другую. В данном случае надо было искать и заменять блок текста из трех
строк.

С этим успешно справилась программа UVFilesCorrector. Интерфейс программы прост до невозможности. В нижней части на вкладке Файлы выбираем нужный нам файл.

В верхнем поле Список замен необходимо нажать на пустое поле и создаем правило для замены. В данном случае оно выглядело так:

На скриншоте видно не все выражение, в поле Что найти: в режиме
Шаблон (регулярное выражение) введено:

<СвПокуп>rn
    <СведЮЛ ИННЮЛ=".........." КПП="000000000"/>rn
 </СвПокуп>

Десять точек в ИННЮЛ=".........." являются регулярным выражением и означают, что на их месте может стоять любой символ. В итоге получилось, что под замену попадали все блоки, имеющие нулевые КПП. Комбинация символов rn также является регулярным выражением и означает перенос строки.

Всего у организации было 14 контрагентов, с которыми в общей сумме было
заключено 266 сделок. Следовательно, после нажатия на кнопку Заменить
получилось 266 замены.

Буквально за один простой шаг по заданному условию было удалено свыше
700 строк. Проверка Tester’ом ошибок не выявила и файл был успешно отправлен в контролирующий орган.

Работа с файлами отчетов Росстата¶

Файлы отчетов Росстата формируются в одну строку, что создает определенные сложности при просмотре в обычных тектовых редакторах.

В отличии, например, от файлов отчетов ФНС.

С файлами Росстата лучше работать с помощью программы XMLPad.

XMLPad имеет несколько режимов отображения:

  1. Стандартный режим (Source) отображения и редактирования кода.

В левой панели отображается структура XML-файла. Значения элементов можно отреактировать напрямую, либо через левую нижнюю панель.

  1. Режим отображения сеткой (Grid).

  1. Табличный вид (Table View).

  1. Режим предпросмотра (Preview).


Загрузить PDF


Загрузить PDF

XML (сокращ. от Extensible Markup Language — расширяемый язык разметки) — это язык разметки, разработанный для передачи данных и текста. В то время как XML похож на HTML, XML содержит данные вместо их отображения. HTML отображает данные. По этой причине XML иногда трудно понять. Тем не менее, XML является важным компонентом многих сайтов, поэтому понимание, как редактировать XML файлы может быть в ваших интересах.

Шаги

  1. Изображение с названием Edit XML Files Step 1

    1

    Купите редактор XML. Есть целый ряд доступных редакторов XML, в том числе Liquid XML Editor.

  2. Изображение с названием Edit XML Files Step 2

    2

    Установите выбранный редактор XML на вашем компьютере.

  3. Изображение с названием Edit XML Files Step 3

    3

    Перезагрузите компьютер, если это необходимо.

  4. Изображение с названием Edit XML Files Step 4

    4

    Ознакомьтесь с рабочей средой вашего XML редактора.

  5. Изображение с названием Edit XML Files Step 5

    5

    Ознакомьтесь с пользовательскими ресурсами, связанными с вашим XML-редактором, например веб-сайтами и онлайн-форумами пользователей.

  6. Изображение с названием Edit XML Files Step 6

    6

    Найдите XML-файл, который хотите отредактировать.

  7. Изображение с названием Edit XML Files Step 7

    7

    Откройте файл, который хотите отредактировать, дважды щелкнув по имени файла. Файл откроется и отобразит существующий код.

  8. Изображение с названием Edit XML Files Step 8

    8

    Измените XML-файл.

  9. Изображение с названием Edit XML Files Step 9

    9

    Просмотрите результаты вашего редактирования.

    • Убедитесь, что все XML элементы имеют открывающий и закрывающий тег. Имейте в виду, что XML -теги чувствительны к регистру.
    • Убедитесь, что ваш XML-файл содержит один основной элемент.
    • Убедитесь, что значения атрибутов в вашем XML файле включены в кавычки. Атрибуты — элементы внутри кода XML, которые обеспечивают дополнительной информацией об элементе, который недоступен в других местах в данных.
    • Убедитесь, что все XML элементы правильно вложены.
  10. Изображение с названием Edit XML Files Step 10

    10

    Исправьте все ошибки, которые обнаружите при рассмотрении вашего XML файла.

  11. Изображение с названием Edit XML Files Step 11

    11

    Используйте инструмент проверки вашего XML редактора, чтобы утвердить свой XML файл. Ваш XML документ не будет работать, если в нем присутствуют ошибки.

  12. Изображение с названием Edit XML Files Step 12

    12

    Исправьте все ошибки, выявленные во время проверки файла.

  13. Изображение с названием Edit XML Files Step 13

    13

    Сохраните заново отредактированный XML файл.

  14. Изображение с названием Edit XML Files Step 14

    14

    Перейдите к XML файлу в веб-браузере. Если ваш XML-файл является недействительным, он не будет отображаться.

    Реклама

Советы

  • XML был разработан для структурирования, сохранения и перемещение данных. Он не имеет никаких других функций. Таким образом, акцент XML — на самих данных , а не как выглядят данные. Вы можете использовать HTML или другой WYSIWYG ( что видите, то и получаете) веб-редактор для форматирования дизайна вашей веб-страницы.
  • XML является основой для многих новых языков Интернета, таких как RSS, который используется в новостных каналах, и WAP и WML, которые используются на мобильных устройствах. Использование XML для форматирования информации также делают его совместимым на нескольких платформах, языках и приложениях и к данным могут легко получить доступ веб-пользователи с ограниченными возможностями.
  • XML-файлы также можно редактировать с помощью программы блокнот компьютера и даже с некоторыми программами обработки текстов и электронными таблицами. Тем не менее, редакторы XML считаются полезными, потому что они в состоянии подтвердить свой код и гарантировать, что вы остаетесь в пределах допустимой структуры XML.

Реклама

Что вам понадобится

  • Компьютер
  • XML-файл или файлы
  • Доступ в Интернет
  • Базовое понимание HTML и JavaScript.

Об этой статье

Эту страницу просматривали 18 474 раза.

Была ли эта статья полезной?

I am creating a sitemap XML from my database it’s about videos sitemap. In XML, I am fetching the video title as title and description as description, but there are some titles and descriptions written in Thai, Portuguese, German, and other languages. While generating the XML through PHP I am facing a problem that says:

«XML Parsing Error: not well-formed».

Generation of the XML stops after encountering this error.

XML Parsing Error: not well-formed
Location: http://localhost/mydesk/sitemap.php
Line Number 24489, Column 69:

I observed it contained invalid characters like listed below, and I have replaced all types of these characters, but I realized there are other characters being used in other languages.

Ð ž ´ Ø ¸ à ½ Ð ‰ ˆ Ù ° § ¼ ¡ ‹ ± …  ³ è ¾ Ñ € ¦ ƒ Ñ ‡ ª Ñ Ï ¿ ¬ µ š † Ð ½ ¹ Œ ² Ð ¼ Î ¶ € Ð µ ] : å < * © > % â © # » ‘ ä æ ï ã Š ç › Š º Ž ¥ œ • ¤ ç ã ® ˜ ¢ ¨ ¯ £

Is there any way to handle this issue that supports all languages?

Скрипт для замены служебных символов в XML

Краткое руководство по XML — http://xml.readthedocs.org

Описание

xml_healer.py (англ. healer — целитель) — скрипт для массового
исправления невалидных XML файлов.

Скрипт выполняет следующие замены:

  • Символ & заменяется на &amp;
  • Символ < заменяется на &lt;
  • Символ > заменяется на &gt;
  • Символы «» заменяются на &quot;

Также скрипт удаляет все, что идет после закрывающего родительского тега
<Файл>.

Системные требования

Для работы скрипта необходимо установить интерпретатор языка
программирования Python (https://www.python.org/downloads/) версии 3
или выше.

Авторские права

Скрипт xml_healer.py распространяется на условиях лицензии
«Attribution-ShareAlike» («Атрибуция — На тех же условиях») 4.0
Всемирная.

Обратная связь

Автор
: Дмитрий Мажарцев

Контакты
: uksvlg@yandex.ru

Адрес
: Волгоград

Дата
: 04 июня 2015 года


Порядок работы

  1. Поместить скрипт xml_healer.py в папку с XML файлами отчетов;
  2. Запустить скрипт двойным нажатием и дождаться завершения его работы;
  3. Ещё раз прогнать исправленный XML файл через
    Tester.

После завершения обработки файлов в командной строке будет выведена
информация о результате обработки и сообщение «*Нажмите Enter*».
Обработанные файлы будут находиться в папке out. Оригинальные файлы
останутся нетронутыми в текущей директории.

Выводимая информация

В ходе выполнения скрипта выводится несколько типов сообщений:

Имя файла: NO_NDS.9_0000_0000_00000000000000000000_20150427_80c4e37b-a160-4b2f-827c-69226f792dfd.xml
Исцелен!

Сообщение Исцелен! означает, что файл успешно обработан и его
исправленная копия находится в папке out.

Имя файла: ФАЙЛ.odt
Не является XML-файлом

Сообщение Не является XML-файлом означает, что файл не является файлом
отчета. xml_healer.py сканирует все файлы в папке, в которой находится
и обрабатывает только те файлы, в конце которых стоит расширение .xml.

Имя файла: file.xml
Файл имеет кодировку отличную от windows-1251

Сообщение появляется, если XML файл имеет кодировку отличную от
windows-1251. Возможно, данный XML файл не является файлом отчета, так
как файлы отчетов должны иметь кодировку windows-1251.

Рекомендации

После работы скрипта рекомендуется прогнать XML файлы через
Tester. При проверке
невалидного XML файла Tester, натыкаясь на первый же некорректный
символ, прекращает проверку. xml_healer.py исправляет все некорректные
символы и Tester может осуществить полную проверку файла, в ходе которой
могут обнаружиться ошибки уже не в структуре файла, а в самом
содержимом.


Проверка изменений в файлах

Чтобы проверить и сравнить изменения в XML файлах, необходимо
воспользоваться программой
WinMerge.


Программное обеспечение

  • xml_healer.py
  • Python 3
  • Tester
  • WinMerge

Приложение

Процесс работы скрипта xml_healer.py со скриншотами:

Шаг 0 — Прогон файла через Tester.

Шаг 1 — Поместить скрипт с файлами для обработки и дойным нажатием
запустить скрипт.

Шаг 2 — Во время работы скрипта откроется окно командной строки, в
котором будет выведен результат обработки
файлов.

Шаг 3 — Обработанные файлы будут находиться в папке.

Шаг 4 — Повторный прогон через Tester.

Содержание:

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С

·        Всё успешно открылось, а ошибка даже не успела возникнуть.

Специалист компании «Кодерлайн»

Айдар Фархутдинов

Понравилась статья? Поделить с друзьями:
  • Как исправить ошибку в сторисе в инстаграме после публикации
  • Как исправить ошибку в сторис в инстаграмме
  • Как исправить ошибку в стоимости основного средства
  • Как исправить ошибку в стиме при покупке игры
  • Как исправить ошибку в стиме при запуске стима