xsl: сортировка с применением шаблонов, а не сортировка - PullRequest
12 голосов
/ 22 марта 2012

У меня довольно большой XSL-документ для назначения, который выполняет несколько задач.Это почти завершено, но я пропустил требование, что это должно быть отсортировано, и я не могу заставить его работать.Вот SSCCE о том, что происходит.

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

<!--   Root Document    -->
<xsl:template match="/">

    <html>
    <body>

        <xsl:apply-templates select="staff">
            <xsl:sort select="member/last_name" />
        </xsl:apply-templates>

    </body>
    </html>

</xsl:template>

<xsl:template match="member">
    <xsl:value-of select="first_name" />&#160;<xsl:value-of select="last_name" /> <br/>
</xsl:template>

</xsl:stylesheet>

Файл XML выглядит следующим образом

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="sort.xsl"?>

<staff>
    <member>
        <first_name>Joe</first_name>
        <last_name>Blogs</last_name>
    </member>

    <member>
        <first_name>John</first_name>
        <last_name>Smith</last_name>
    </member>

    <member>
        <first_name>Steven</first_name>
        <last_name>Adams</last_name>
    </member>

</staff>

Я ожидал, что сотрудники будут перечислены по фамилии, но они не получаютотсортирован.Пожалуйста, помните, что я очень неопытен в XSLT.

Ответы [ 2 ]

27 голосов
/ 22 марта 2012
    <xsl:apply-templates select="staff">
        <xsl:sort select="member/last_name" />
    </xsl:apply-templates>

выбирает элементы персонала и сортирует их, но есть только один элемент персонала, так что это запрет.

Изменить на

    <xsl:apply-templates select="staff/member">
        <xsl:sort select="last_name" />
    </xsl:apply-templates>

затем выбирает все элементы-члены и сортирует их.

3 голосов
/ 22 марта 2012

отсутствует шаблон соответствия персонала или измените соответствующий шаблон на член, как в этом:

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

<!--   Root Document    -->
<xsl:template match="/">

    <html>
    <body>

        <xsl:apply-templates select="staff/member">
            <xsl:sort select="last_name" />
        </xsl:apply-templates>

    </body>
    </html>

</xsl:template>

<xsl:template match="member">
    <xsl:value-of select="first_name" />&#160;<xsl:value-of select="last_name" /> <br/>
</xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...