如何在 XSLT 中使用 for-each 组对数据编号进行排序

How to sort data numbers with for-each group in XSLT

如何用xsl:for-each对数据编号进行排序?
输入XML

 <root>
    <p content-type="Sta_index2"><bold>6000&#x2013;6243</bold></p>
    <p content-type="Sta_index2"><bold>5000&#x2013;5158</bold></p>
    <p content-type="Sta_index2"><bold>6068(e)</bold></p>
    <p content-type="Sta_index2"><bold>6148</bold></p>
    <p content-type="Sta_index2"><bold>6200&#x2013;6206</bold></p>
    <p content-type="Sta_index2"><bold>6203(b)</bold></p>
    <p content-type="Sta_index2"><bold>480</bold></p>
    <p content-type="Sta_index2"><bold>6500</bold></p>
    <p content-type="Sta_index2"><bold>6450</bold></p>
    <p content-type="Sta_index2"><bold>6500&#x2013;6592</bold></p>
    <p content-type="Sta_index2"><bold>6501(f)(1)</bold></p>
    <p content-type="Sta_index2"><bold>6533.5</bold></p>
    <p content-type="Sta_index2"><bold>10018.15</bold></p>
    <p content-type="Sta_index2"><bold>10018.14</bold></p>
</root>

XSLT

<xsl:template match="root">
    <xsl:copy>
        <xsl:for-each select="p">
            <xsl:sort select="number(bold)" data-type="number" order="ascending"/>
            <xsl:text>&#x0A;</xsl:text>
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>    
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

预期输出

    <root>
    <p content-type="Sta_index2"><bold>480</bold></p>
    <p content-type="Sta_index2"><bold>5000&#x2013;5158</bold></p>
    <p content-type="Sta_index2"><bold>6000&#x2013;6243</bold></p>
    <p content-type="Sta_index2"><bold>6068(e)</bold></p>
    <p content-type="Sta_index2"><bold>6148</bold></p>
    <p content-type="Sta_index2"><bold>6200&#x2013;6206</bold></p>
    <p content-type="Sta_index2"><bold>6203(b)</bold></p>
    <p content-type="Sta_index2"><bold>6450</bold></p>
    <p content-type="Sta_index2"><bold>6500</bold></p>
    <p content-type="Sta_index2"><bold>6500&#x2013;6592</bold></p>
    <p content-type="Sta_index2"><bold>6501(f)(1)</bold></p>
    <p content-type="Sta_index2"><bold>6533.5</bold></p>
    <p content-type="Sta_index2"><bold>10018.14</bold></p>
    <p content-type="Sta_index2"><bold>10018.15</bold></p>
</root>

代码:https://xsltfiddle.liberty-development.net/3NSTbfj/29

正如 Sebastien 在评论中指出的那样,您可以尝试去除要用于排序的十进制值后的任何内容:

<xsl:template match="root">
    <xsl:copy>
        <xsl:perform-sort select="p">
            <xsl:sort select="bold => replace('[^0-9.].*$', '') => xs:decimal()"/>
        </xsl:perform-sort>
    </xsl:copy>
</xsl:template>

https://xsltfiddle.liberty-development.net/3NSTbfj/30