Show/Hide Toolbars

Руководство администратора

Пример XSLT преобразований

Ссылки Назад Вверх Вперед

Пример XSL файла

Описание

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output method="xml" version="1.0" encoding="UTF-8"

indent="yes" cdata-section-elements="ExtParam999Value"/>

"Шапка" документа.

Функция strip-space, указанная в шапке документа", убирает лишние пробелы во всем документе

<xsl:template match="@*|node()">
 <xsl:copy >
         <xsl:apply-templates select="@*|node()"/>
 </xsl:copy>
</xsl:template>

определение функции преобразования match. Использовать ее предпочтительнее, чем copy, поскольку при использовании match можно одновременно переназначить имя элемента, а при использовании copy имя элементв результирующем файле сохраняется то же, что и в исходном

<xsl:template match="DocumentElement">
 <Ads formatVersion="3" target="Avito.ru">
         <xsl:apply-templates/>
 </Ads>
</xsl:template>

поскольку операторы xsl-template не могут быть вложенными, сначала отдельно выполняется преобразование родительского узла Ads, а затем дочерних узлов Ad

<xsl:template match="Objects_avito">
 <Ad>
         <xsl:apply-templates/>
 </Ad>
</xsl:template>

<xsl:template match="TaskID"> </xsl:template>

<xsl:template match="StateName"> </xsl:template>

<xsl:template match="ExtParam111Value"> </xsl:template>

если основные или дополнительные параметры, возвращаемые SQL View, не нужны в результирующем файле, для них создаются "пустые" преобразования.

В данном примере не нужны ID задачи, название статуса и значение ДП с ID=111

<xsl:template match="ExtParam222Value">
 <CompanyName>
         <xsl:apply-templates/>
 </CompanyName>
</xsl:template>

<xsl:template match="ExtParam333Value">
 <Price>
         <xsl:apply-templates/>
 </Price>
</xsl:template>

ДП с ID=222 записывается в поле с именем CompanyName

 

 

ДП с ID=333 записывается в поле с именем Price

 

 

<xsl:template match="ExtParam444Value">
 <Floor>
                 <xsl:apply-templates select="@*|node()"/>
 </Floor>
</xsl:template>

Рекурсивная обработка атрибутов, текста и элементов, пока не останется ни одного дочернего элемента

<xsl:template match="CreatedTime">
 <DateBegin><xsl:value-of select="substring-before(., 'T')"/></DateBegin>
</xsl:template>

Обрезание вывода формата даты с YYYY-MM-DDThh:mm:ss до YYYY-MM-DD

<xsl:template match="ExtParam555Value">
 <xsl:choose>
         <xsl:when test="//ExtParam555Value='Апартаменты'">
                 <Category>Квартиры</Category>
         </xsl:when>
         <xsl:otherwise>

         </xsl:otherwise>
 </xsl:choose>
</xsl:template>

Условное преобразование:

значение ДП с ID=555 записывается в  поле с именем Category. При этом если значение ДП равно "Апартаменты", то оно преобразуется в значение "Квартиры", иначе в поле  Category не записывается ничего

<xsl:template match="//url">
 <xsl:element name="Image">
         <xsl:attribute name="{name()}">
                 <xsl:value-of select="."/>
         </xsl:attribute>
 </xsl:element>
</xsl:template>

Поиск элемента "url", затем запись этого элемента в качестве атрибута в новый элемент "Image"