Краткое руководство по xmlКраткое руководство по xml,...

39
Краткое руководство по XML Выпуск 01.12.2015 v2 Dmitry сент. 27, 2017

Upload: others

Post on 23-May-2020

38 views

Category:

Documents


0 download

TRANSCRIPT

Краткое руководство по XMLВыпуск 01.12.2015 v2

Dmitry

сент. 27, 2017

Оглавление

1 Предисловие ко 2-му изданию 31.1 Авторские права . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Обратная связь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 I. Коротко об XML 52.1 Введение в XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Структура XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 Правила синтаксиса (Валидность) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.4 Сущности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.5 Поиск информации в XML файлах (XPath) . . . . . . . . . . . . . . . . . . . . . . . . . . 72.6 Кодировки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.7 XSD схема . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 II. Инструменты для работы с XML 113.1 Tester . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 XMLPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.3 UVFilesCorrector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.4 Xpath-Tester . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.5 Notepad++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.6 Geany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.7 WinMerge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4 III. Практические примеры 134.1 Исправление невалидных XML-файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.2 Удаление лишних блоков(абзацев) из XML по заданному условию . . . . . . . . . . . . . 144.3 Работа с файлами отчетов Росстата . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5 IV. Скрипт для замены служебных символов в XML 215.1 Описание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.2 Порядок работы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225.3 Проверка изменений в файлах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225.4 Программное обеспечение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235.5 Приложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

6 V. Проверка XML-файла по XSD-схеме 276.1 Проверка по XSD-схеме в XMLPad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286.2 Проверка по XSD-схеме в MS Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

i

7 Список используемых источников 31

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

ii

Краткое руководство по XML, Выпуск 01.12.2015 v2

Примечание: Последняя правка: сент. 27, 2017

Содержание:

Оглавление 1

Краткое руководство по XML, Выпуск 01.12.2015 v2

2 Оглавление

ГЛАВА 1

Предисловие ко 2-му изданию

Руководство состоит из пяти разделов. В первом разделе приводятся основы языка разметки XML.Во втором разделе приведены инструменты, упрощающие работу с XML файлами. В третьем разделерассматриваются практические примеры работы с XML. В четвертом разделе приведена инструкция поскрипту xml_healer.py, исправляющего невалидные XML-файлы. В пятом разделе рассмтариваетсяпроверка XML-файлов по XSD-схеме с помощью специальных интсрументов.

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

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

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

Все вопросы, правки и пожелания направляйте на адрес [email protected].

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

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

Дата 06 июля 2015 года

3

Краткое руководство по XML, Выпуск 01.12.2015 v2

4 Глава 1. Предисловие ко 2-му изданию

ГЛАВА 2

I. Коротко об XML

Введение в XML

XML ( англ. eXtensible Markup Language) — расширяемый язык разметки, предназначенный для хра-нения и передачи данных.

Простейший XML-документ выглядит следующим образом:

<?xml version="1.0" encoding="windows-1251"?><book category="WEB">

<title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price></price>

</book>

Первая строка — это XML декларация. Здесь определяется версия XML (1.0) и кодировка файла. Наследующей строке описывается корневой элемент документа <book> (открывающий тег). Следующие4 строки описывают дочерние элементы корневого элемента ( title, author, year, price). Последняястрока определяет конец корневого элемента </book> (закрывающий тег).

Документ XML состоит из элементов (elements). Элемент начинается открывающим тегом (start-tag)в угловых скобках, затем идет содержимое (content) элемента, после него записывается закрывающийтег (end-teg) в угловых скобках.

Информация, заключенная между тегами, называется содержимым или значением элемента:<author>Erik T. Ray</author>. Т.е. элемент author принимает значение Erik T. Ray. Элементы мо-гут вообще не принимать значения.

Элементы могут содержать атрибуты, так, например, открывающий тег <title lang="en"> имеетатрибут lang, который принимает значение en. Значения атрибутов заключаются в кавычки (двойныеили ординарные).

Некоторые элементы, не содержащие значений, допустимо записывать без закрывающего тега. В такомслучае символ / ставится в конце открывающего тега:

5

Краткое руководство по XML, Выпуск 01.12.2015 v2

<name first="Иван" second="Петрович" />

Структура XML

XML документ должен содержать корневой элемент. Этот элемент является «родительским» для всехдругих элементов.

Все элементы в XML документе формируют иерархическое дерево. Это дерево начинается с корневогоэлемента и разветвляется на более низкие уровни элементов.

Все элементы могут иметь подэлементы (дочерние элементы):

<корневой><потомок>

<подпотомок>.....</подпотомок></потомок>

</корневой>

Правила синтаксиса (Валидность)

Структура XML документа должна соответствовать определенным правилам. XML документ отвеча-ющий этим правилам называется валидным (англ. Valid — правильный) или синтаксически верным.Соответственно, если документ не отвечает правилам, он является невалидным .

Основные правила синтаксиса XML:

1. Теги XML регистрозависимы — теги XML являются регистрозависимыми. Так, тег <Letter> нето же самое, что тег <letter>.

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

<Message>Это неправильно</message><message>Это правильно</message>

2. XML элементы должны соблюдать корректную вложенность:

<b><i>Некорректная вложенность</b></i><b><i>Корректная вложенность</i></b>

3. У XML документа должен быть корневой элемент — XML документ должен содержать одинэлемент, который будет родительским для всех других элементов. Он называется корневым эле-ментом.

Примечание: В большинстве XML файлов отчетов для ФНС (Федеральная налоговаяслужба) корневым элементом является <Файл></Файл>. После закрывающего тега </Файл>больше ничего быть не должно.

4. Значения XML атрибутов должны заключаться в кавычки:

<note date="12/11/2007">Корректная запись</note><note date=12/11/2007>Некорреткная запись</note>

6 Глава 2. I. Коротко об XML

Краткое руководство по XML, Выпуск 01.12.2015 v2

Сущности

Некоторые символы в XML имеют особые значения и являются служебными. Если вы поместите,например, символ < внутри XML элемента, то будет сгенерирована ошибка, так как парсер интерпре-тирует его, как начало нового элемента.

В примере ниже будет сгенерирована ошибка, так как в значении "ООО<Мосавтогруз>" атрибутаНаимОрг содержатся символы < и >.

<НПЮЛ ИННЮЛ="7718962261" КПП="771801001" НаимОрг="ООО<Мосавтогруз>"/>

Также ошибка будет сгенерирована и в слудющем примере, если название организации взять в обычныекавычки (английские двойные):

<НПЮЛ ИННЮЛ="7718962261" КПП="771801001" НаимОрг="ООО"Мосавтогруз""/>

Чтобы ошибки не возникали, нужно заменить символ < на его сущность. В XML существует 5 пред-определенных сущностей:

Таблица 2.1: Таблица I.1 — Сущности

Сущность Символ Значение&lt; < меньше, чем&gt; > больше, чем&amp; & амперсанд&apos; ' апостроф&quot; " кавычки

Примечание: Только символы < и & строго запрещены в XML. Символ > допустим, но лучше еговсегда заменять на сущность.

Таким образом, корректными будут следующие формы записей:

<НПЮЛ ИННЮЛ="7718962261" КПП="771801001" НаимОрг="ООО&quot;Мосавтогруз&quot;"/>

или

<НПЮЛ ИННЮЛ="7718962261" КПП="771801001" НаимОрг="ООО«Мосавтогруз»"/>

В последнем примере английские двойные кавычки заменены на французские кавычки («ёлочки»),которые не являются служебными символами.

Поиск информации в XML файлах (XPath)

XPath ( англ. XML Path Language) — язык запросов к элементам XML-документа. XPath расширяетвозможности работы с XML.

XML имеет древовидную структуру. В документе всегда имеется корневой элемент (инструкция <?xmlversion=”1.0”?> к дереву отношения не имеет). У элемента дерева всегда существуют потомки и пред-ки, кроме корневого элемента, у которого предков нет, а также тупиковых элементов (листьев дерева),у которых нет потомков. Каждый элемент дерева находится на определенном уровне вложенности(далее — «уровень»). У элементов на одном уровне бывают предыдущие и следующие элементы.

2.4. Сущности 7

Краткое руководство по XML, Выпуск 01.12.2015 v2

Это очень похоже на организацию каталогов в файловой системе, и строки XPath, фактически, — путик «файлам» — элементам. Рассмотрим пример списка книг:

<?xml version="1.0" encoding="windows-1251"?><bookstore>

<book category="COOKING"><title lang="it">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price>

</book><book category="CHILDREN">

<title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>

</book><book category="WEB">

<title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price>

</book></bookstore>

XPath запрос /bookstore/book/price вернет следующий результат:

<price>30.00</price><price>29.99</price><price>39.95</price>

Сокращенная форма этого запроса выглядит так: //price.

С помощью XPath запросов можно искать информацию по атрибутам. Например, можно найти ин-формацию о книге на итальянском языке: //title[@lang="it"] вернет <title lang="it">EverydayItalian</title>.

Чтобы получить больше информации, необходимо модифицировать запрос //book[title[@lang="it"]] вернет:

<book category="COOKING"><title lang="it">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price>

</book>

В приведенной ниже таблице представлены некоторые выражения XPath и результат их работы:

8 Глава 2. I. Коротко об XML

Краткое руководство по XML, Выпуск 01.12.2015 v2

Таблица 2.2: Таблица I.2 — Выражения XPath

Выражение XPath Результат/bookstore/book[1]

Выбирает первый элемент book, который является потомком элементаbookstore

/bookstore/book[position()<3]

Выбирает первые два элемента book, которые являются потомкамиэлемента bookstore

//title[@lang] Выбирает все элементы title с атрибутом lang//title[@lang=’en’]

Выбирает все элементы title с атрибутом lang, который имеет значение en

/bookstore/book[price>35.00]

Выбирает все элементы book, которые являются потомками элементаbookstore и которые содержать элемент price со значением больше 35.00

/bookstore/book[price>35.00]/title

Выбирает все элементы title элементов book элементов bookstore,которые содержать элемент price со значением больше 35.00

Кодировки

И еще один важный момент, который стоит рассмотреть — кодировки. Существует множество кодиро-вок, о них подробнее можно прочитать в статье Набор символов.

Самыми распространенными кириллическими кодировками являются Windows-1251 и UTF-8. Послед-няя является одним из стандартов, но большая часть ФНС отчетности имеет кодировку Windows-1251.

В XML файле кодировка объявляется в декларации:

<?xml version="1.0" encoding="windows-1251"?>

Часто можно столкнуться с ситуацией, когда текстовый редаткор некорректно распознает кодировкуи отображает кракозябры. В такой случае, необходимо выбрать кодировку вручную, для этого выпол-ните:

Таблица 2.3: Таблица I.3 — Смена кодировки в разных программах

Программа КодировкаNotepad++ «Документ → Кодировка»Geany «Документ → Установить кодировку»Firefox «Вид → Кодировка»Chrome «Настройка → Дополнительные инструменты → Кодировка»

Примечание: В большинстве случаев при работе с русскоязычными файлами помогает переключе-ние кодировки на Windows-1251 или UTF-8. Если все равно не удается прочитать содержимое XMLдокумента, стоит открыть его в Mozilla Firefox, он отлично распознает кодировки.

Если ничего не помогает, вполне возможно, что файл был поврежден.

XSD схема

XML Schema — язык описания структуры XML-документа, его также называют XSD. Как большин-ство языков описания XML, XML Schema была задумана для определения правил, которым должен

2.6. Кодировки 9

Краткое руководство по XML, Выпуск 01.12.2015 v2

подчиняться документ. Но, в отличие от других языков, XML Schema была разработана так, чтобы еёможно было использовать в создании программного обеспечения для обработки документов XML.

После проверки документа на соответствие XML Schema читающая программа может создать модельданных документа, которая включает:

• словарь (названия элементов и атрибутов);

• модель содержания (отношения между элементами и атрибутами и их структура);

• типы данных.

Каждый элемент в этой модели ассоциируется с определённым типом данных, позволяя строить в па-мяти объект, соответствующий структуре XML-документа. Языкам объектно-ориентированного про-граммирования гораздо легче иметь дело с таким объектом, чем с текстовым файлом.

Подробнее об XSD смотрите:

• XML Schema

• XSD — умный XML

Примечание: Примером использования XSD cхем может служить электронная отчетность:

• ФНС: Справочник налоговой и бухгалтерской отчетности

10 Глава 2. I. Коротко об XML

ГЛАВА 3

II. Инструменты для работы с XML

XML-документы представляют собой обыкновенные текстовые файлы. Для работы с ними достаточнолюбого простейшего текстового редактора. Однако существуют специальные инструменты для работыс XML.

Все приведенные ниже программы являются бесплатными, их можно скачать с официальных сайтов.

Tester

Tester — Программа, разработанная ФНС для проверки файлов на соответствие форматам представ-ления в электронном виде налоговых деклараций, бухгалтерской отчетности.

XMLPad

XMLPad — многофункциональный специализированный XML редактор.

XMLPad обладает богатым функционалом, поддерживает XPath, возможность удалять целые блокитегов, смену кодировок, проверку валидности и т.д.

UVFilesCorrector

UVFilesCorrector — программа для быстрого исправления текстовых файлов, текста в буфере обменаи просто выделенного текста. Позволяет искать и заменять целые блоки текста.

Xpath-Tester

Xpath-Tester — сайт для тестирования запросов XPath.

11

Краткое руководство по XML, Выпуск 01.12.2015 v2

Notepad++

Notepad++ — мощный текстовый редактор с функцией нумерации строк и выбора кодировки.

Geany

Geany — cвободная среда разработки программного обеспечения, написанная с использованием биб-лиотеки GTK2. Поддерживает смену кодировок, нумерацию строк и т.д.

WinMerge

WinMerge — Open Source инструмент сравнения и слияния для Windows. WinMerge может сравниватькак файлы, так и папки, отображая различия в визуальной текстовой форме, которые легко понять иобработать.

12 Глава 3. II. Инструменты для работы с XML

ГЛАВА 4

III. Практические примеры

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

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

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

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

Совет: Подробнее о регулярных выражениях смотрите статью Регулярные выражения и книгу БенФорта: Освой самостоятельно регулярные выражения. 10 минут на урок

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

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

13

Краткое руководство по XML, Выпуск 01.12.2015 v2

Удаление лишних блоков(абзацев) из 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"/>

</СвПокуп>

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

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

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

14 Глава 4. III. Практические примеры

Краткое руководство по XML, Выпуск 01.12.2015 v2

Рис. 4.1: Проверка файла отчета программой Tester

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

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

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

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

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

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

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

</СвПокуп>

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

Краткое руководство по XML, Выпуск 01.12.2015 v2

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

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

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

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

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

</СвПокуп>

Совет: Подробнее о регулярных выражениях смотрите статью Регулярные выражения и книгу БенФорта: Освой самостоятельно регулярные выражения. 10 минут на урок

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

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

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

16 Глава 4. III. Практические примеры

Краткое руководство по XML, Выпуск 01.12.2015 v2

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

Краткое руководство по XML, Выпуск 01.12.2015 v2

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

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

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

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

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

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

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

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

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

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

18 Глава 4. III. Практические примеры

Краткое руководство по XML, Выпуск 01.12.2015 v2

4.3. Работа с файлами отчетов Росстата 19

Краткое руководство по XML, Выпуск 01.12.2015 v2

Совет: Также XMLPad позволяет проверить XML-файл по XSD-схеме, подробнее в разделе V. Про-верка XML-файла по XSD-схеме.

20 Глава 4. III. Практические примеры

ГЛАВА 5

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

Описание

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

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

• Символ & заменяется на &amp;;

• Символ < заменяется на '&lt;;

• Символ > заменяется на &gt;

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

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

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

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

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

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

21

Краткое руководство по XML, Выпуск 01.12.2015 v2

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

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.

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

Краткое руководство по XML, Выпуск 01.12.2015 v2

Рис. 5.1: Слева — исходный файл. Справа — файл после обработки скриптом xml_healer.py

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

• xml_healer.py

• Python 3

• Tester

• WinMerge

Приложение

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

Рис. 5.2: Шаг 0 — Прогон файла через Tester

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

Краткое руководство по XML, Выпуск 01.12.2015 v2

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

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

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

Краткое руководство по XML, Выпуск 01.12.2015 v2

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

Рис. 5.6: Шаг 4 — Повторный прогон исправленного файла через Tester

5.5. Приложение 25

Краткое руководство по XML, Выпуск 01.12.2015 v2

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

ГЛАВА 6

V. Проверка XML-файла по XSD-схеме

В данном разделе описаны способы проверки XML-файла по XSD-схеме. Сделать это можно разнымиспособами, существует много программ для этих целей. По XSD-схеме, например, проверяет програм-ма Tester, но она только показывает ошибки и не дает их исправить. Для большего удобства лучшеиспользовать специализированные редакторы такие, как XMLPad или MS Visual Studio.

Совет: Проверять файл по XSD-схеме целесообрано в исключительных случаях, например, еслискрипт xml-healer.py не справился с исправлением файла. Подробнее в главе IV. Скрипт для за-мены служебных символов в XML.

MS Visual Studio является спецаилизированным инструментом для программистов, обладающимогромным функционалом. Работа с XML и автоматическая проверка по XSD – лишь одна из множествафункций среды разработки. MS Visual Studio 15 можно скачать бесплатно с официального сайта:https://www.visualstudio.com/ru-ru/products/visual-studio-community-vs.

XMLPad — многофункциональный специализированный XML редактор. XMLPad обладает бога-тым функционалом, поддерживает XPath, возможность удалять целые блоки тегов, смену кодиро-вок, проверку валидности и т.д. XMLPad доступен для бесплатного использования на сайте: http://xmlpad-mobile.com.

Совет: XMLPad уступает по удобству и возможностям MS Visual Studio, но если вы не являетесьпрограммистом и у вас не установлена MS Visual Studio, лучше воспользоваться XMLPad.

Примечание: Перед проверкой файлов необходимо предварительно скачать файлы XSD-схем. Ска-чать XSD-схемы можно с официальных сайтов контролирующих органов. В качестве примера взятадекларация по НДС, скачать XSD-схему для нее можно с сайта Справочник налоговой и бухгалтерскойотчетности.

27

Краткое руководство по XML, Выпуск 01.12.2015 v2

Проверка по XSD-схеме в XMLPad

1. Откройте XML-файл, который требуется проверить в XMLPad File > Open.

2. Чтобы проверить файл по заданной XSD-схеме, его надо с ней ассоциировать. Перейдите в менюXML > Assign Schema/DTD.

3. Выберите W3C Schema и нажмите Browse, затем выберите XSD-схему для проверки.

4. После того, как XSD-схема ассоциирована, нажмите F7 или XML > Validate, чтобы проверитьфайл. В нижней части окна будут выведены ошибки, нажав на которые можно подсветить строку,в которой они находятся.

28 Глава 6. V. Проверка XML-файла по XSD-схеме

Краткое руководство по XML, Выпуск 01.12.2015 v2

Совет: Для удобства отображения можно включить переносы строк Edit > Word Wrap.

Проверка по XSD-схеме в MS Visual Studio

1. Откройте XML-файл, который требуется проверить в MS Visual Studio Файл > Открыть >Файл.

2. Чтобы проверить файл по заданной XSD-схеме, его надо с ней ассоциировать. Перейдите в меню

6.2. Проверка по XSD-схеме в MS Visual Studio 29

Краткое руководство по XML, Выпуск 01.12.2015 v2

XML-код > Схемы....

3. Нажмите Добавить и выберите файл XSD-схемы.

Проверка на соответсвие XSD-схеме будет осуществляться автоматически на лету. Внизу в окне Спискаошибок будет отображаться список ошибок. При нажатии на ошибку, она будет подсвечена в редакторе.

Совет: Добавить окно Списка ошибок можно через Вид > Списка ошибок.

30 Глава 6. V. Проверка XML-файла по XSD-схеме

ГЛАВА 7

Список используемых источников

1. Бен Форта: Освой самостоятельно регулярные выражения. 10 минут на урок

2. Учебник XML для начинающих

3. Википедия:XML

4. Википедия: XPath

5. Спецификация XML Path (XPath)

6. Кодировка UTF-8

7. Кодировка Windows-125

8. Набор символов

9. Приказ ФНС от 29 октября 2014 г. N ММВ-7-3/558@ Об утверждении формы налоговой деклара-ции по налогу на добавленную стоимость, порядка ее заполнения, а также формата представленияналоговой декларации по налогу на добавленную стоимость в электронной форме

10. Приказ ФНС от 29 июня 2012 г. N ММВ-7-6/435@ Об утверждении порядка и условий присвоения,применения, а также изменения идентификационного номера налогоплательщика

31

Краткое руководство по XML, Выпуск 01.12.2015 v2

32 Глава 7. Список используемых источников

Краткое руководство по XML, Выпуск 01.12.2015 v2

34 Глава 8. Программное обеспечение

Алфавитный указатель

GGeany, 12

NNotepad++, 12

TTester, 11, 14

UUVFilesCorrector, 11, 16

WWinMerge, 12

XXML Schema, 9xml_healer.py, 21XMLPad, 11XPath, 7Xpath, 15Xpath-Tester, 11, 15XSD, 9

35