Итерация по строковому параметру XSLT и выполнение действий для каждого параметра - PullRequest
1 голос
/ 25 декабря 2011

Я пытаюсь построить некоторые элементы XML на основе строкового параметра XSLT.Идея довольно проста.

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

<category>{$string}</category>

Где {$string} - это одно из значений, разделенных запятыми.Поэтому, если пользователь предоставляет этот параметр: category1, category2, cat3, тогда я должен получить его в файле XML:

<category>category1</category>
<category>category2</category>
<category>cat3</category>

Также должна быть возможность предоставить пустую строку, в этом случае элемент XML не печатается.

Обратите внимание, что я использую XSLT 2.0, поэтому не стесняйтесь включать конструкции XPath и XSLT на основе 2.0.

1 Ответ

3 голосов
/ 25 декабря 2011

Это преобразование (XSLT 2.0):

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:param name="pCategories"
 select="'category1, category2, cat3'"/>

 <xsl:template match="/">
  <xsl:for-each select="tokenize($pCategories, ',')[.]">
   <category>
    <xsl:value-of select="normalize-space()"/>
    </category>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

при применении к любому документу XML (не используется), дает требуемый, правильный результат :

<category>category1</category>
<category>category2</category>
<category>cat3</category>
...