如何对XSLT中每个组的数据编号进行排序
如何使用xsl:for each对数据编号进行排序?如何对XSLT中每个组的数据编号进行排序,xslt,xslt-2.0,Xslt,Xslt 2.0,如何使用xsl:for each对数据编号进行排序? 输入XML <root> <p content-type="Sta_index2"><bold>6000–6243</bold></p> <p content-type="Sta_index2"><bold>5000–5158</bold></p> <p con
输入XML
<root>
<p content-type="Sta_index2"><bold>6000–6243</bold></p>
<p content-type="Sta_index2"><bold>5000–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–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–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>
6000–;6243
5000–;5158
6068(e)
6148
6200;6206
6203(b)
480
6500
6450
6500–;6592
6501(f)(1)
6533.5
10018.15
10018.14
XSLT
<xsl:template match="root">
<xsl:copy>
<xsl:for-each select="p">
<xsl:sort select="number(bold)" data-type="number" order="ascending"/>
<xsl:text>
</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–5158</bold></p>
<p content-type="Sta_index2"><bold>6000–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–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–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>
480
5000–;5158
6000–;6243
6068(e)
6148
6200;6206
6203(b)
6450
6500
6500–;6592
6501(f)(1)
6533.5
10018.14
10018.15
代码:正如塞巴斯蒂安在评论中指出的那样,您可以尝试去除小数点后的任何内容,以用于排序:
<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>
正如塞巴斯蒂安在评论中指出的那样,您可以尝试去除小数点后的任何内容,以用于排序:
<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>
您需要修改字符串以仅保留您希望应用排序的数字部分。您需要修改字符串以仅保留您希望应用排序的数字部分。谢谢@Martin Sir!谢谢@Martin先生!