Перейти к основному содержимому

Преобразование документа 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</Сборка>
</Приложение>
</Приложения>
примечание

В «Шине» поддерживается XSLT версий 1.0, 2.0 и 3.0 (использует XPath 3.1).

Реализация XSLT 3.0 в «Шине» не поддерживает:

  • schema-aware XSLT
  • multi-threaded XSLT
  • streamable XSLT

Также применимы ограничения реализации XPath 3.1 в «Шине» — см. здесь.