XSLT - создать переменную, которая должна содержать уникальные и отсортированные данные - PullRequest
0 голосов
/ 07 июня 2018

Я использую XSLT 2.0 и Apache FOP для преобразования XSLT.

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

<equipment>
    <E0132>
        <category>1. First Aid</category>
        <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</description>
    </E0132>
    <E0133>
        <category>1. First Aid</category>
        <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</description>
    </E0133>
    <E4122>
        <category>3. Fire safety</category>
        <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</description>
    </E4122>
    <E4182>
        <category>3. Fire safety</category>
        <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</description>
    </E4182>
    <E4622>
        <category>2. Access control</category>
        <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</description>
    </E4622>
    <E5225>
        <category>4. Recognition</category>
        <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</description>
    </E5225>
</equipment>

Код XSL, который у меня есть на данный момент, таков:

<xsl:variable name="equipment">
    <xsl:for-each select="//equipment/node()/category">
        <xsl:sort select="." order="ascending" />

        <xsl:value-of select="distinct-values(.)"/>               
    </xsl:for-each>        
</xsl:variable>

Он решает часть сортировки, но кажется, что функция distinct-values() не работает, у меня есть дублированные значения.

Что я делаю не так?

1 Ответ

0 голосов
/ 07 июня 2018

Вы должны поместить distinct-values вокруг выбранного выражения

<xsl:for-each select="distinct-values(//equipment/node()/category)">
    <xsl:sort select="." order="ascending" />
    <xsl:value-of select="."/>               
</xsl:for-each>        
...