применить шаблоны в обратном порядке - PullRequest
14 голосов
/ 08 сентября 2008

скажи, что у меня есть данный XML-файл

<root>
    <node>x</node>
    <node>y</node>
    <node>a</node>
</root>

и я хочу, чтобы отображалось следующее

ayx

используя что-то похожее на

<xsl:template match="/">
    <xsl:apply-templates select="root/node"/>
</xsl:template>
<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>

Ответы [ 3 ]

30 голосов
/ 08 сентября 2008

Легко!

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>
3 голосов
/ 08 сентября 2008

Вы можете сделать это, используя xsl: sort. Важно установить data-type = "number", потому что в противном случае позиция будет отсортирована как строка, конец которой для 10-го узла будет рассмотрен до 2-го.

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort 
            select="position()" 
            order="descending" 
            data-type="number"/>
    </xsl:apply-templates>
</xsl:template>
<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>
0 голосов
/ 25 апреля 2018
<xsl:template match="/">
        <xsl:apply-templates select="root/node[3]"/>
        <xsl:apply-templates select="root/node[2]"/>
        <xsl:apply-templates select="root/node[1]"/>
    </xsl:template>
    <xsl:template match="node">
        <xsl:value-of select="."/>
    </xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...