Обработка XML и загрузка данных из него
Задача
Обработать имеющийся файл формата XML, разобрать данные по структуре для дальнейшего использования (например, вставки и обновления строк Колибри).
Исходные данные
Перед тем как приступить к решению задачи, ознакомимся с имеющимся файлом bookstore.xml. На его основе необходимо составить хранилище книжного магазина.
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book title="Everyday Italian">
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book title="Harry Potter">
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book title="XQuery Kick Start">
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book title="Learning XML">
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Сценарий решения задачи
Решение задачи будет заключаться в создании процесса, который будет включать следующие шаги:
- Получение XML файла.
- Преобразование файла в XML.
- Получение данных о книгах с помощью узла "Таблица XPath".
- Получение данных об авторах книг с помощью узла "Таблица XPath".
- Присоединение к данным о книгах данных об их авторах.
Используемые узлы
Прочитать файл
Преобразовать из XML
Таблица XPath
Присоединение
Построение и настройка процесса
Создадим и сохраним новый процесс.
Для обработки файла процессом добавим узел Прочитать файл.
Укажем название узла "Файл bookstore.xml" и настроим свойства, указав сетевой путь до файла XML.

Для преобразования выходных данных узла "Файл bookstore.xml"* из потока байт в формат XML добавим узел Преобразовать из XML и соединим его входной порт с выходным портом узла "Файл bookstore.xml".

Заполним свойства узла Преобразовать из XML, установив свойство "Добавить идентификатор элемента", чтобы далее иметь возможность установить связи между родительским и дочерними элементами.

Для обработки полученного XML-документа добавим в процесс узел Таблица XPath и соединим его входной порт с выходным портом узла Преобразовать из XML". .

У узла Таблица XPath укажем название "Информация о книгах" и заполним свойства для получения данных.
Укажем//bookкак корневой элемент для того, чтобы получить в качестве строк выходной таблицы все элементыbook.
Файл содержит информацию одного книжного магазина, поэтому определение родительского элемента для элементовbookне требуется, свойство "Добавить идентификатор родительского элемента" не устанавливаем.

Для получения данных о книгах добавим колонки и укажем соответствующий XPath.
Колонка XPath Примечание Наименование /book/@titleПолучим атрибут titleэлементаbookГод /book/yearПолучим элемент yearпотомок элементаbookЦена /book/priceПолучим элемент priceпотомок элементаbookАвтор /book/authorПолучим один из множества элементов authorпотомка элементаbook.
Получение полного перечня авторов будет выполнено отдельным узловВыполним проверку процесса, при наличии ошибок исправим их.
Запустим процесс в отладке для просмотра результатов узла "Информация о книгах".
Обрабатываемый XML-документ содержал 4 элементаbook, которые преобразованы в строки выходной таблицы.
Колонкаidдобавлена в выходную таблицу, так как в узле Преобразовать из XML было установлено свойство "Добавить идентификатор элемента".

Для получения полного перечня авторов добавим в процесс ещё один узел Таблица XPath и соединим его входной порт с выходным портом узла "Преобразовать из XML".

У узла Таблица XPath укажем название "Информация об авторах" и заполним свойства для получения данных.
Укажем//book/authorкак корневой элемент для того, чтобы получить в качестве строк выходной таблицы все элементыauthorродительских элементовbook.
Установим ✓ в свойстве "Добавить идентификатор родительского элемента", для добавления элементамauthorидентификатора родительского элементаbook_id, это позволит позже присоединить элементыauthorк элементамbook.
Для получения значений элементовauthorдобавим соответствующую колонку.

Запустим процесс в отладке для просмотра результатов узла "Информация о авторах".
Обрабатываемый XML-документ содержал 8 элементовauthor, которые преобразованы в строки выходной таблицы.
Колонкаbook_idдобавлена в выходную таблицу, и позволит присоединить данные к выходным данным узла "Информация о книгах".

Для присоединения к данным о книгах данных об их авторах добавим в процесс узел Присоединение и соединим его с выходными портами узлов "Информация о книгах" и "Информация об авторах".

У узла Присоединение укажем название "Присоединение к книгам авторов", заполним свойства и отредактируем правило присоединения.

Запустим процесс в отладке для просмотра результатов узла "Присоединение к книгам авторов".

Далее таблица с данными, полученная из узла "Присоединение к книгам авторов", может быть обработана с помощью других узлов, а данные записаны в хранилище.