XSLT - работа с переменными типа массив и древо
in

В XSL возможность работы с переменными типа массив и дерево обеспечивается при помощи расширения exsl.

Переменную можно задать в явном виде

<xsl:variable name="process_stages">
<stage name="unprocessed"/>
<stage name="inprocess"/>
<stage name="processed"/>
</xsl:variable>

Либо, что правильнее, взять из дополнительного файла

 <xsl:variable name="process_stages" select="document(\'lib_enums.xml\')/enums/process_stages"/>

После этого взять массив можно при помощи выражения exsl:node-set

 <xsl:for-each select="exsl:node-set($process_stages)/stage">
<xsl:value-of select="@name"/>
</xsl:for-each>

Чтобы exsl работал необхдимо объявить пространство имен в шаблоне

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" version="1.0">

Замечу что внутри for-each будет работать модель переменной, т.е. / = корень выбранного массива. Поэтому выбирать дополнительную информацию необходимо до цикла, а передавать прийдется через переменные

 <xsl:variable name="base_url" select="/page/@base"/>
<xsl:for-each select="exsl:node-set($process_stages)/stage">
<a href="{$base_url}?stage={@name}"><xsl:value-of select="@name"/></a>
</xsl:for-each>
0
Your rating: Нет