Преобразование документа XML
Структура документа XML может быть изменена с помощью XSLT (eXtensible Stylesheet Language Transformations
) — стандартного языка преобразования XML. К объектной модели исходного документа применяется таблица стилей XSLT
, состоящая из одного или нескольких шаблонов, в результате чего создается новая структура узлов, на основе которой создается новый выходной документ XML. Для доступа к узлам XML-документа в XSLT
используется язык запросов XPath.
«1С:Шина» позволяет использовать все стандартные средства преобразования с использованием XSLT
. Для этого в «Шине» существует специальный тип встроенного языка — ПреобразовательXml. Конструктор объекта данного типа в качестве аргументов принимает таблицу стилей и дополнительные параметры к ней. Также в качестве аргумента может передаваться обработчик сообщения XSLT
, который может использоваться для отладки и логирования при преобразовании документа.
Пример
Для следующего документа в формате XML:
<?xml version="1.0" encoding="UTF-8"?>
<Проекты>
<Проект>
<Приложение Название="Демо CRM" Сборка="1.0"/>
<Приложение Название="Демонстрационное приложение" Сборка="1.1"/>
<Приложение Название="1С:Кабинет сотрудника" Сборка="2.0"/>
</Проект>
</Проекты>
так может выглядеть таблица стилей XSLT 1.0
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:template match="Проект">
<Приложения>
<xsl:apply-templates/>
</Приложения>
</xsl:template>
<xsl:template match="Приложение">
<Приложение>
<xsl:apply-templates select="@*"/>
</Приложение>
</xsl:template>
<xsl:template match="@Название">
<Название>
<xsl:value-of select="."/>
</Название>
</xsl:template>
<xsl:template match="@Сборка">
<Сборка>
<xsl:value-of select="."/>
</Сборка>
</xsl:template>
</xsl:stylesheet>
на основе которой создается дерево с корневым элементом Приложения
, а атрибуты каждого приложения из старого файла становятся самостоятельными элементами:
<?xml version="1.0" encoding="UTF-8"?>
<Приложения>
<Приложение>
<Название>Демо CRM</Название>
<Сборка>1.0</Сборка>
</Приложение>
<Приложение>
<Название>Демонстрационное приложение</Название>
<Сборка>1.1</Сборка>
</Приложение>
<Приложение>
<Название>1С:Кабинет сотрудника</Название>
<Сборка>2.0</Сборка>
</Приложение>
</Приложения>