XSLT如何仅对XML文档的字符串节点中的数值进行排序



我有一个应用程序,它在节点中生成一个带有css格式的xml文档来装饰值。我以编程方式构建一个XSLT文档并将其应用于xml,并且希望仅按数字对其进行排序。我正在用JavaScript处理xml和xslt文档,然后将结果显示为报告。节点值如下所示:

<span class="g">96%</span>
<span class="r">56.5%</span>

如何对值进行排序并忽略周围的任何文本?

编辑:翻译听起来是可行的,但我不知道如何应用它。我有n个可点击的标题。当单击时,文档被修改,并且新的<xsl:sort字段添加了所单击标头的标题。

<th id="hdr6" <a href="#" onClick="sortXML(6,&quot;Collections_502&quot;,false)">Collections 502</a></th>
... later in the doc...
<xsl:for-each select="records/record">
<xsl:sort select="Collections_502/@value" order="ascending"/>

所以,我不知道该把翻译放在哪里。它看起来像吗:

<xsl:sort select="translate('Collections_502/@value','0123456789','')" order="ascending"/>

编辑2:有多个列可以点击进行排序。因此,xml看起来像:

<records>
<record id="12">
<person_first value="Bob"/>
<person_int value="15844"/>
<Collections_502 value="<span class='a'>100%</span>"/>
<Data_Security_494 value="<span class='a'>100%</span>"/>
<EBO_505 value="0"/>
<FDCPA_499 value="<span class='c'>50%</span>"/>
<General_Compliance_498 value="<span class='a'>100%</span>"/>
<HIPAA_500 value="<span class='a'>100%</span>"/>
<History_and_Ethics_497 value="<span class='a'>100%</span>"/>
<Human_Resources_495 value="<span class='b'>67%</span>"/>
<TCPA_404 value="<span class='b'>67%</span>"/>
</record>
<record id="13">
<person_first value="Erik"/>
<person_int value="14238"/>
<Collections_502 value="0"/>
<Data_Security_494 value="<span class='a'>100%</span>"/>
<EBO_505 value="0"/>
<FDCPA_499 value="<span class='a'>91%</span>"/>
<General_Compliance_498 value="<span class='a'>100%</span>"/>
<HIPAA_500 value="<span class='a'>100%</span>"/>
<History_and_Ethics_497 value="<span class='a'>100%</span>"/>
<Human_Resources_495 value="<span class='a'>100%</span>"/>
<TCPA_404 value="<span class='a'>100%</span>"/>
</record>
</records>

我从网上的一个例子中得到了以下内容:;内部translate((删除所有感兴趣的字符(例如,数字(以获得外部translate的from字符串((,该字符串从原始字符串中删除这些非数字字符">

<xsl:for-each select="records/record">
<xsl:sort select="translate('HIPAA_500/@value', translate('HIPAA_500/@value', '0123456789', ''), '')" data-type="number" order="ascending"/>

它不起作用。没有错误,只是没有排序。

在您的示例中,排序指令可能看起来像:

<xsl:for-each select="span">
<xsl:sort select="translate(., '%', '')" data-type="number" order="ascending"/>
<!-- do something -->
</xsl:for-each>

演示:https://xsltfiddle.liberty-development.net/pNEj9cR

最新更新