当xml元素的值意味着不同的东西(如排序价格)但每个价格都有不同的货币时,如何对它们进行排序

Posted

技术标签:

【中文标题】当xml元素的值意味着不同的东西(如排序价格)但每个价格都有不同的货币时,如何对它们进行排序【英文标题】:How to sort xml elements when their value mean different things like sorting prices but each price have different currency 【发布时间】:2021-04-06 05:33:19 【问题描述】:

我有一个描述课程及其标题价格等的 XML 文档, 我想使用 XSLT 生成一个 html 文档,其中输出将是一个表格,但该行应根据价格从低到高排序,但每门课程都有不同的货币,费率将通过新属性在 XML 中硬编码称为速率示例“ rate = 10.95 ”。我已经对它们进行了排序,但仅基于价格我没有考虑货币。

这是我的 XML 文档

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="q2.xsl"?>
<catalogue>
    <cours id="INFO-H-509" type="Informatique">
        <titre>Technologies XML</titre>
        <prix unite="Usd">4000</prix>
        <session num="1">
            <date>12-03-2015</date>
        </session>
        <session num="2">
            <date>28-12-2015</date>
        </session>
    </cours>
    <cours id="MATH-0-1" type="Mathematique">
        <titre>Recheche Opérationelle</titre>
        <prix unite="Euro">3000</prix>
        <session num="1">
            <date>12-03-2013</date>
        </session>
    </cours>
    <cours id="INFO-B-9" type="Informatique">
        <titre>Architecture client/serveur </titre>
        <professeur cin="AD456"/>
        <prix unite="Usd">5000</prix>
        <session num="1">
            <date>10-01-2016</date>
        </session>
    </cours>
</catalogue>

到目前为止,这是我的 XSL 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns="http://www.w3.org/1999/xhtml">
    <xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
    <xsl:template match="/catalogue">
        <html>
            <HEAD>
                <TITLE>Titre</TITLE>
                <link rel="stylesheet" href="q1_style.css"/>

            </HEAD>
            <BODY>
                <div class="container">
                    <h1>Tableau qui resume le nombre d'ouvrage </h1>
                    <table class="table">
                        <tr >
                            <th></th>
                            <th class="table-head">Type</th>
                            <th class="table-head">Nombre de session</th>
                            <th class="table-head">Prix</th>
                        </tr>
                        <xsl:for-each select="cours">
                            <xsl:call-template name="afficherCours">
                                <xsl:with-param name="cours" select="."></xsl:with-param>
                            </xsl:call-template>
                        </xsl:for-each>
                    </table>
                </div>
            </BODY>
        </html>
    </xsl:template>

    <xsl:template name="afficherCours">
        <xsl:param name="cours"/>
        <tr>
            <td>
                <xsl:value-of select="$cours/titre"></xsl:value-of>
            </td>
            <td>
                <xsl:value-of select="$cours/@type"></xsl:value-of>
            </td>
            <td>
                <xsl:value-of select="count($cours/session)"></xsl:value-of>
            </td>
            <td>
                <xsl:value-of select="concat($cours/prix,' ',$cours/prix/@unite)">
                </xsl:value-of>
                <!-- <xsl:value-of select="$cours/prix/@unite"></xsl:value-of> -->
            </td>
        </tr>
    </xsl:template>
</xsl:stylesheet>

【问题讨论】:

我没有看到任何对所示 XSLT 代码进行排序的尝试。如果您想以不同的货币换算价格,您想从哪里获得汇率以进行换算,例如欧元兑美元? 费率将被硬编码,无需从第三方应用程序获取,我使用 进行了排序,但我删除了它,因为它只是基于排序关于数字 费率会在 XML 中硬编码吗?还是 XSLT? “速率将通过一个名为 rate 的新属性在 XML 中硬编码” 请编辑您的 XML 示例以准确显示它的外观。 【参考方案1】:

如果prix 元素具有rate 属性,那么您可能可以使用以下方式进行排序:

<xsl:sort select="prix * prix/@rate" data-type="number"/> 

我说可能,因为我们没有输入 XML 的实际示例。

【讨论】:

它可以工作,非常感谢,但是你能向我解释一下 data-type 与这条指令有什么关系,因为一旦我删除了 data-type 它就不起作用了 如果您删除data-type 属性,排序将默认为字母顺序。这确实有效 - 只是不是您想要的方式。

以上是关于当xml元素的值意味着不同的东西(如排序价格)但每个价格都有不同的货币时,如何对它们进行排序的主要内容,如果未能解决你的问题,请参考以下文章

谁能建议如何在android Recycler View中按产品价格实现排序[关闭]

从xml中提取节点的值

从 json 解析返回的数据排序与 json 字符串不同

根据元组的值,以不同的顺序对元组列表进行排序。

算法小结

八大排序算法之四选择排序—堆排序(Heap Sort)