首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSLT 1.0 /排序-每个结果都有一个条件

XSLT 1.0 /排序-每个结果都有一个条件
EN

Stack Overflow用户
提问于 2020-01-20 15:58:27
回答 1查看 50关注 0票数 0

如何对for-each循环结果的输出进行排序,以便具有特定条件的元素(某些具有值的子元素)被排序到结果的顶部,在这些元素之后,按XML的自上而下的顺序排序。

我的示例XML如下所示

代码语言:javascript
运行
复制
<waybill>
<shipment>
    <parcel>
        <sscc>SSCC1</sscc>
        <consignee>Receiver1</consignee>
        <date>Date1</date>
        <status>Status1</status>
    </parcel>
    <parcel>
        <sscc>SSCC2</sscc>
        <consignee>Receiver2</consignee>
        <attention>Note2</attention>
    </parcel>
    <parcel>
        <sscc>SSCC3</sscc>
        <consignee>Receiver3</consignee>
    </parcel>
    <parcel>
        <sscc>SSCC4</sscc>
        <consignee>Receiver4</consignee>
    </parcel>
    <parcel>
        <sscc>SSCC5</sscc>
        <consignee>Receiver5</consignee>
        <attention>Note5</attention>
        <date>Date2</date>
        <status>Status2</status>
    </parcel>
    <parcel>
        <sscc>SSCC6</sscc>
        <consignee>Receiver6</consignee>
        <attention>Note6</attention>
    </parcel>
</shipment>
</waybill>

这里的with是将for-each循环生成到层中,这样它将首先列出元素中具有值的循环,然后列出rest。

因此,期望的输出将是:

代码语言:javascript
运行
复制
SSCC2;Receiver2;Note2
SSCC5:Receiver5;Note5
SSCC6;Receiver6;Note6
SSCC1;Receiver1
SSCC3;Receiver3
SSCC4;Receiver4

我一般知道如何构建for-each循环,但是如何定义输出的排序呢?

我只有XSLT 1.0,所以解决方案应该只使用它...

编辑:我的XSLT如下所示:

代码语言:javascript
运行
复制
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="text" version="1.0" encoding="ISO-8859-1" indent="yes"/>
    <xsl:template match="/">
        <xsl:for-each select="waybill/shipment/parcel">
            <xsl:value-of select="sscc"/>
            <xsl:text>;</xsl:text>
            <xsl:value-of select="consignee"/>
            <xsl:text>;</xsl:text>
            <xsl:value-of select="attention"/>
            <xsl:text>&#xD;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-20 16:16:57

尝试:

代码语言:javascript
运行
复制
<xsl:sort select="number(boolean(attention))" data-type="number" order="descending"/>

或者:

代码语言:javascript
运行
复制
<xsl:sort select="count(attention)" data-type="number" order="descending"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59819012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档