Сайт о телевидении

Сайт о телевидении

» » Как создать xml файл. Формирование файла XML. Простая выгрузка для стороннего приложения

Как создать xml файл. Формирование файла XML. Простая выгрузка для стороннего приложения

Хотелось бы в одном месте рассказать о вполне типичной задаче при работе с XML , а именно, о создании XML на основе существующего. Данная операция будет состоять из нескольких этапов, при выполнении которых, будут решены дополнительные задачи, такие как:

  • Создание XML на основе XSD , и наоборот.
  • Сериализация и десериализация объектов.
  • Создание класса, для будущей сериализации из XML или XSD .
Перед началом планирую, что читатель знаком со словами XML и XSD . Что касается XML , думаю с этим проблем нет, но что касается XSD могу возникнут вопросы, что же это такое. Если коротко, то:
XSD - это язык, для описания XML . И если вы посмотрите содержимое файла содержащего это описание, то возникнет вопрос, зачем же описывать казалось бы очевидные теги вашего XML ? Но представьте, что вы интегрируетесь с какой то внешней системой, и для обмена данных хотите использовать формат XML . Так вот, XSD позволяет описать для каждого элемента его именя, возможные атрибуты, обязательность полей или атрибутов, дать понять, что содержимое какого то тега может содержать лишь один внутренний элемент () и не более, либо узел может иметь последовательность элементов (< a> ... ). Когда внешняя система является вашей, тогда проблем может не возникнуть, но когда это сторонняя организация, тогда данное описание через XSD , будет инструментом урегулирования споров с форматом, а так же, используя утилиты, можно проверить соответствие любой XML изначальному формату.
Итак, что же мы будем делать, для того, что бы научиться штамповать XML на основе вашего эталона? Опишу всё по порядку.

Имеется:
Какой то XML (xmlfile.xml) , сохраненный в текстовом формате в файл. Ниже приведу текст:

< catalog > < book id = " bk101 " > < author > Gambardella, Matthew < title > XML Developer"s Guide < genre > Computer < price > 44.95 < publish_date > 2000-10-01 < description > An in-depth look at creating applications with XML. < book id = " bk102 " > < author > Ralls, Kim < title > Midnight Rain < genre > Fantasy < price > 5.95 < publish_date > 2000-12-16 < description > A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.

Действия для создание нового:

  1. Сначала используя утилиту XSD.exe , либо воспользовавшись онлайн сервисами (искать "xml to xsd" один из них www.freeformatter.com/xsd-generator.html), мы будем создавать из имеющейся XML ее примитивное XSD описание. На выходе мы будем иметь полностью, автоматическим образом, созданный output.xsd файл, который уже подходит к использованию но может быть не полным.
  2. Далее, на основе output.xsd , будут созданы классы на языке C# xmlclass.cs. После чего, мы добавляем его в наш проект. Создавать класс можно используя XSD.exe, либо xsd2code утилитой, или же любым онлайн сервисом.
  3. Теперь мы готовы использовать классы файла xmlclass.cs . Поэтому создадим и наполним данными экземпляры xmlclass , а потом, используя процесс сериализации, будем преобразовывать объекты в XML строку, и после чего сохраним ее в новый файл. Тем самым получим XML на основе имеющегося.
Приступим!

Шаг 1. Создание XSD из XML.

Итак, приведу способы, которыми пользуюсь сам:
  1. Утилита xsd.exe - создатель Microsoft .
  2. Утилита xsd2code.exe - стороннее приложение, которое умеет все тоже самое, что и xsd.exe , но доступно для скачивания напрямую (на данный момент стала платной с Trial периодом).
  3. Использование любых онлайн сервисов.
Для того, что бы получить XSD.exe , вам придется поставить любой Microsoft SDKs , в поставке которого, идет данное приложение. К сожалению, на данный момент ни одна из студий в своем комплекте не содержит этой утилиты.

Ссылка для скачивания и установки одного из SDK :
Windows SDK for Windows 7 and .NET Framework 4 .

Воспользуемся поиском, и найдем файл xsd.exe , после чего (что бы упростить себе работу), скопируем его в созданную в корне диска папку C:\xmltoxsd . Далее в эту же папку мы копируем наш xmlfile.xml и все готово к началу.


Отрываем "Командную строку" (Пуск -> "Выполнить" -> "cmd"), переходим в наш каталог и вызываем с параметрами по умолчанию xsd.exe , передавая наш xmlfile.xml параметром:


И видим, что рядом появился файл xmlfile.xsd с содержимым.


Вот и все! Этих действий достаточно, для создания примитивного XSD файла, с которым можно работать. Но стоит понимать, что сам xsd.exe , как и любая другая утилита, ничего не знает про типы ваших полей (поэтому почти всегда тип полей будет string ), а так же о всех вариациях атрибутов и параметров. То есть, если у какого-то тега нет атрибута в вашей XML , тогда его и не будет в описании. Поэтому XML должен быть наиболее полным и в случае, если элемент может содержать несколько дочерних полей, лучше добавить как минимум два, что бы xsd.exe понял, что это коллекция.

Синтаксис XSD не очень сложный, поэтому, если пишется достаточно серьезное описание, возможно придется поработать и напильником.

Шаг 2. Создание Class из XSD.

Для создания класса на языке C#, нам понадобится вновь использоваться xsd.exe но уже с другим параметром /classes , передав путь к нашему xmlfile.xsd .


После выполнения появится файл xmlfile.cs, содержимое которого приведено ниже в сжатом виде:


Как видите, для внутреннего элемента catalog был создан класс catalogBook , у которого поля соответствуют полям в XML , а поле Id помечено как атрибут. Xsd.exe корректно понял, что внутри catalog хранится коллекция книг, поэтому появилось свойство Items , для наполнения дочерней коллекции.
Замечание: xsd.exe не умеет добавлять комментарии к получившимся классам и полям. В описании XSD существует элемент под названием < xs:annotation > , который чаще всего содержит < xs:documentation >, внутри которого размещено описание поля. По идее, оно должно быть размещено в /// описании, но на текущий момент xsd.exe отказывается добавлять текст в описание, поэтому приходится прибегать к альтернативам, таким как xsd2code или онлайн сервисам.

Шаг 3. Сериализация объектов в XML.

Получившиеся классы у нас лежат в файле xmlfile.cs . Далее его содержимое или сам файл добавляем в проект Visual Studio , после чего можно с ним работать. Я создам демонстративный объекты книг, после чего сохраню в файл в формате XML .

Private void Example() { // Создание первой книги var book1 = new catalogBook () { author = "King" , description = "Very interesting book" , genre = "Fantasy" , price = 22.ToString(), id = "42011" , title = "It" }; // Создание второй книги var book2 = new catalogBook () { author = "O"Brien, Tim" , description = "Microsoft"s .NET initiative is explored in detail in this deep programmer"s reference." , genre = "Computer" , price = 36.ToString(), id = "30012" , title = "Microsoft .NET: The Programming Bible" }; // Создание корневого элемента каталога, содержащего две книги выше var catalog = new catalog () { Items = new { book1, book2 } }; // Содержит XML объекта catalog var xmlCatalog = Serialize(catalog); // Записываем строку в файл // TODO Сделано для демонстрации. Желательно вызывая метод Serialize передавать Stream к файлу File .WriteAllText("Output.xml" , xmlCatalog); } private string Serialize(TType sourceObject) { if (sourceObject == null ) { return string .Empty; } // Используем XmlSerializer для перобразования в XML строку var xmlserializer = new XmlSerializer (typeof (TType )); var stringWriter = new StringWriter (); using (var writer = XmlWriter .Create(stringWriter, new XmlWriterSettings () { Indent = true })) { xmlserializer.Serialize(writer, sourceObject); return stringWriter.ToString(); } } После запуска и открытия Output.xml можно увидеть, что мы сохранили так, как мы хотели (Нижний файл - "Созданный кодом ").

XML – это универсальный формат работы с данными. Его поддерживает множество программ, в том числе из сферы СУБД. Поэтому конвертация информации в XML важна именно с точки зрения взаимодействия и обмена данными между различными приложениями. Excel как раз входит в число программ, которые работают с таблицами, и даже может выполнять манипуляции с базами данных. Разберемся, как конвертировать файлы Эксель в XML.

Конвертация данных в формат XML не такой уж простой процесс, так как в его ходе должна быть создана специальная схема (schema.xml). Впрочем, для преобразования информации в простейший файл данного формата достаточно иметь под рукой обычные инструменты сохранения в Excel, а вот для создания хорошо структурированного элемента придется основательно повозиться с составлением схемы и её подключением к документу.

Способ 1: простое сохранение

В Excel можно сохранить данные в формате XML, просто воспользовавшись меню «Сохранить как…» . Правда, нет гарантии, что потом все программы будут корректно работать с файлом, который был создан таким способом. Да и не во всех случаях этот способ работает.


Таким образом, преобразование файла из формата Excel в XML будет совершено.

Способ 2: инструменты разработчика

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

  1. По умолчанию вкладка инструментов разработчика отключена. Поэтому, прежде всего, нужно её активировать. Переходим во вкладку «Файл» и кликаем по пункту «Параметры» .
  2. В открывшемся окне параметров перемещаемся в подраздел «Настройка ленты» . В правой части окна устанавливаем галочку около значения «Разработчик» . После этого жмем на кнопку «OK» , размещенную в нижней части окна. Вкладка инструментов разработчика теперь включена.
  3. Далее открываем таблицу Excel в программе любым удобным способом.
  4. На её основе нам предстоит создать схему, которая формируется в любом текстовом редакторе. Для этих целей можно использовать и обычный Блокнот Windows, но лучше применять специализированное приложение для программирования и работы с языками разметки . Запускаем эту программу. В ней создаем схему. На нашем примере она будет выглядеть, как показано внизу на скриншоте окна Notepad++.

    Как видим, открывающим и закрывающим тегом для документа в целом служит «data-set» . В этой же роли для каждой строки выступает тег «record» . Для схемы вполне будет достаточно, если мы возьмем всего две строки таблицы, а не будем переводить её всю вручную в XML. Название открывающего и закрывающего тега столбца может быть произвольным, но в данном случае для удобства мы предпочли просто перевести русскоязычные наименования колонок на английский язык. После того, как данные внесены, просто сохраняем их через функционал текстового редактора в любом месте на жестком диске в формате XML под названием «schema» .

  5. Опять переходим к программе Excel с уже открытой таблицей. Перемещаемся во вкладку «Разработчик» . На ленте в блоке инструментов «XML» кликаем по кнопке «Источник» . В открывшемся поле в левой части окна жмем на кнопку «Карты XML…» .
  6. В открывшемся окне кликаем по кнопке «Добавить…» .
  7. Запускается окно выбора источника. Переходим в директорию расположения схемы составленной ранее, выбираем её и кликаем по кнопке «Открыть» .
  8. После того, как элементы схемы появились в окне, перетаскиваем их с помощью курсора в соответствующие ячейки наименования столбцов таблицы.
  9. Кликаем правой кнопкой мыши по полученной таблице. В контекстном меню последовательно переходим по пунктам «XML» и «Экспорт…» . После этого сохраняем файл в любой директории.

Как видим, существуют два основных способа конвертации файлов XLS и XLSX в формат XML программой Microsoft Excel. Первый из них предельно простой и заключается в элементарной процедуре сохранения с заданным расширением через функцию «Сохранить как…» . Простота и понятность данного варианта, несомненно, являются преимуществами. Но у него есть один очень серьезный недостаток. Преобразование выполняется без учета определенных стандартов, и поэтому файл, конвертируемый таким способом, сторонними приложениями может просто не распознаваться. Второй вариант предполагает составление карты XML. В отличие от первого способа, таблица, преобразованная по данной схеме, будет соответствовать всем стандартам качества XML. Но, к сожалению, не каждый пользователь сможет быстро разобраться с нюансами этой процедуры.

Появилась задача создания XML файла на основе XSD схемы. Поиски по форумам приводили к большому количеству обсуждений, связанных с непониманием процесса, и всего к паре статей объясняющих суть. Люди задавали вопросы, бились над решением, но после того как задача поддавалась им, просто исчезали, не описав механизм. Это подтолкнуло на создание простого описания процесса.
P.S. Не ругайтесь сильно, моей целью не было создание некой наукообразной статьи, строго использующей правильную терминологию, а желание просто помочь сделать первый шаг к пониманию очень мощного механизма обмена через XML.
P.P.S. Сразу должен оговориться, что прилагаемый к статье файл выгрузки является только заготовкой, создающей только часть требуемой структуры XML файла, т.к. моя работа с этой выгрузкой имела скорее познавательный характер (копировать предыдущий документ по экспорту на сайте ФТС и загружать из Excel"овского файла только табличную часть Товары представилось более эффективным решением), а недостаток времени не позволял дописать создание всей структуры, исходя только из соображений перфекционизма.

Итак, зарегистрировавшись на сайте ФТС, стало понятно, что для создания документов Статистической отчетности по экспорту требуется выгрузка данных из документов Реализация товаров и услуг Управления торговлей и создания файла для загрузки.

Там возможно два варианта загрузки.

Первый: загрузка табличной части с Товарами из файла Excel (этот вариант и был выбран как рабочий, т.к. имел те плюсы, что не надо было возиться с обработкой "Шапки" документа, а можно было просто копировать предыдущий, изменив в "Шапке" то, что требовалось).

Второй: создание XML файла по схеме скачаной с сайта ФТС в виде "Альбома форматов электронных форм документов". Альбом представляет из себя достаточно большое количество XSD схем. В них была найдена схема "Статистической формы учета перемещения товара" и дополнительные файлы с описаниями типов для нее. Схемы прилагаются к статье в архиве с обработкой.

Для просмотра XSD схем использовался бесплатный Майкрософтовский XML Notepad 2007.

На изображении показан основной файл со схемой XSD "Статистическая форма учета перемещения товара". На изображении выделены основные блоки XSD схемы, требуемые нам для ее понимания.

Из схемы видно, что нам надо получить XML файл, заполненый структурой, указанной в ветке "xs:element" типа StaticFormType.

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

Данная структура имеет тип StaticFormType, который в свою очередь, состоит из базового типа BaseDocType, набора объектов разных типов и текстовых аттрибутов.

Базовый тип BaseDocStyle описывается в другом файле (и пространстве имен)
.

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

Теперь перейдем к работе в 1С. В двух словах, то что нам надо сделать сводится к следующему:

1. Создается ФабрикаXDTO

НашаФабрикаXDTO = СоздатьФабрикуXDTO(МассивПолныхИменФайловСоСхемамиXSD);

2. В фабрикеXDTO создаются все сложные типы данных, которые далее мы будем заполнять в создаваемом файле XML:

StaticFormType = МояФабрикаXDTO.Тип("urn:customs.ru:Information:CustomsDocuments:StaticForm:5.4.0", "StaticFormType");

Типы данных, входящих в некий тип, можно получить из коллекции его свойств:

CUOrganizationType = StaticFormType.Свойства.Получить("Consignee").Тип; NameType = CUOrganizationType.Свойства.Получить("OrganizationName").Тип; ShortNameType = CUOrganizationType.Свойства.Получить("ShortName").Тип; LanguageCodeType = CUOrganizationType.Свойства.Получить("OrganizationLanguage").Тип;

3. Когда все сложные типа данных созданы, создаем на их основе структуру XML файла, состоящую из объектов ФабрикиXDTO:

StaticFormType_ОбъектXDTO = МояФабрикаXDTO.Создать(StaticFormType); // коллекция с документами NewDocuments = МояФабрикаXDTO.Создать(DocumentsType); NewDocuments.PrDocumentName = МояФабрикаXDTO.Создать(PrDocumentNameType, "Товарная накладная"); NewDocuments.PrDocumentNumber = МояФабрикаXDTO.Создать(PrDocumentNumberType, "123-номер"); NewDocuments.PrDocumentDate = МояФабрикаXDTO.Создать(PrDocumentDateType, "2014-10-05"); StaticFormType_ОбъектXDTO.Documents.Добавить(NewDocuments);

Одновременно заполняем элементарные (простых типов) реквизиты.

4. Ну и наконец выгружаем все из ФабрикиXDTO в файл:

ФайлXML = Новый ЗаписьXML(); ФайлXML.ОткрытьФайл(ИмяФайла); ФайлXML.ЗаписатьОбъявлениеXML(); МояФабрикаXDTO.ЗаписатьXML(ФайлXML, StaticFormType_ОбъектXDTO); ФайлXML.Закрыть();

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

Разархивировать все файлы в некоторую директорию.

XML будет создаваться в ней же.

Инструкция

Определитесь с тем, какого типа будет создаваемый документ XML. Будет ли это правильно построенный (well-formed) или действительный (valid) документ. Выбор типа документа напрямую зависит от его содержимого и цели применения. Если документ необходим для сохранения произвольных данных и не подразумевается дальнейшая его публикация или стандартизация структуры, можно создать well-formed документ. Подобные документы должны соответствовать всем правилам синтаксиса XML.Действительный документ XML должен являться правильно построенным и, вдобавок, придерживаться правил, определяемых конкретной схемой DTD (Document Type Definition). Поэтому, если необходимо четко зафиксировать структуру и возможные отношения между элементами, следует создавать именно действительный (valid) документ XML.

Подберите или разработайте типа документа (DTD). Для распространенных задач можно использовать одно из существующих приложений XML, спецификации которых опубликованы на сайте консорциума W3C, находящемся по адресу w3.org, либо на сайтах сторонних разработчиков. Так, удобно описывать в формате MathML, векторные рисунки - в SVG, а электронные книги в FictionBook. Преимущество данного подхода заключается в том, что документы, соответствующие уже утвержденным спецификациям, смогут обрабатываться существующим программным обеспечением.В случае принятия решения о разработке собственного DTD, ознакомьтесь с нормативной документацией консорциума W3C. Если создаваемый документ не будет соответствовать никакому DTD, продумайте и зафиксируйте его примерную структуру, чтобы следовать ей в будущем.

Выберите кодировку XML-документа. В XML можно использовать различные кодировки. Однако при выборе стоит учесть возможности используемого текстового редактора, а также требования к набору символов данных документа. Из-за совместимости с ASCII, переменной длины символа и полной поддержки всего набора UNICODE, в большинстве случаев имеет смысл использовать кодировку UTF-8.

Создайте XML документ. Запустите текстовый редактор. Откройте новое окно документа. В первой строке введите объявление XML вида:

где значением атрибута version является применяемая версия спецификации языка, а значение атрибута encoding указывает на кодировку документа. Если используется определение типа документа, введите текст DTD или ссылку на ресурс с действительным DTD. Далее создайте структуру данных документа, начиная с корневого элемента. Сохраните документ в файл на жестком диске.

Если необходимо создать файл XML-данных и файл схемы XML из диапазона ячеек на листе, можно использовать версию 1.1 надстройки "Средства XML для Excel 2003" для расширения существующих возможностей XML в Microsoft Excel 2007 и более поздних версиях.

Примечание: Эта надстройка была разработана для Excel 2003. Документация и пользовательский интерфейс ссылаются на списки, которые в версиях приложения позднее Excel 2003 называются таблицами Excel.

Дополнительные сведения о работе с этой надстройкой см. в статье Использование надстройки "Средства XML" версии 1.1 для Excel 2003 .

Этап 2. Преобразование диапазона ячеек в таблицу XML

    Введите данные, для которых необходимо создать файл XML-данных и файл схемы XML. Данные должны быть представлены в табличном формате в виде столбцов и строк (так называемые обычные данные).

    На вкладке Надстройки в группе Команды меню щелкните стрелку возле надписи Средства , а затем нажмите кнопку Преобразовать диапазон в список XML .

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

    В поле Первая строка содержит имена столбцов выберите Нет , если первая строка содержит данные, или Да , если первая строка содержит заголовки столбцов, и нажмите кнопку ОК .

    Excel автоматически создаст схему XML, выполнит привязку ячеек к схеме и создаст таблицу XML.

    Важно: Если откроется редактор Visual Basic и отобразится сообщение об ошибке Visual Basic for Applications (VBA), выполните следующие действия.

    1. Нажмите кнопку ОК .

      В выделенную строку в модуле кода VBA удалите из строки «50». Другими словами, изменение:
      XMLDoc как msxml 2 . DOMDocument50
      Кому:
      XMLDocкак MSXML2 описывается. DOMDocument

      Нажмите клавишу F5 для поиска следующей строки, содержащей текст "XMLDoc As msxml2.DOMDocument50", нажмите кнопку ОК и измените строку, как в предыдущем пункте.

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

      Если после нажатия клавиши F5 сообщения об ошибке VBA больше не отображается, закройте редактор Visual Basic, чтобы вернуться в книгу. Диапазон ячеек будет преобразован в XML-таблицу.

      Примечание: Чтобы отобразить все карты XML в книге, на вкладке Разработчик в группе XML нажмите кнопку Источник для отображения области задач «Источник XML». В нижней части области задач «Источник XML» нажмите кнопку Карты XML .

      Если вкладка Разработчик не видна, выполните три первых действия, указанных в следующем разделе, чтобы добавить ее на ленту Excel.

Действие 3. Экспорт XML-таблицы в файл XML-данных (XML)

Примечание: При создании карт XML и экспорте данных в Excel в XML-файлы существует ограничение на количество строк, которые можно экспортировать. При экспорте в XML-файл из Excel можно сохранить до 65 536 строк. Если файл содержит более 65 536 строк, Excel сможет экспортировать только первые строки (число строк mod 65 537). Например, если лист содержит 70 000 строк, Excel экспортирует 4464 строки (70 000 mod 65 537). Мы рекомендуем последовать одному из следующих советов: 1) используйте формат XLSX; 2) сохраните файл в формате "Таблица XML 2003 (*.xml)" (при этом будут потеряны сопоставления); 3) удалите все строки после 65 536 и затем снова выполните экспорт (при этом сопоставления сохранятся, но будут потеряны строки в конце файла).