当xml元素的值表示不同的事情(如排序价格)但每个价格具有不同的货币时,如何对其进行排序

当xml元素的值表示不同的事情(如排序价格)但每个价格具有不同的货币时,如何对其进行排序,xml,sorting,xslt,Xml,Sorting,Xslt,我有一个XML文档,描述课程及其标题价格等。, 我想使用XSLT生成一个HTML文档,其中输出将是一个表,但行应根据价格从低到高进行排序,但每门课程的货币不同。费率将通过一个名为rate example“rate=10.95”的新属性以XML硬编码。我已经把它们分类了,但根据价格,我没有考虑货币。< /P> 这是我的XML文档 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet

我有一个XML文档,描述课程及其标题价格等。, 我想使用XSLT生成一个HTML文档,其中输出将是一个表,但行应根据价格从低到高进行排序,但每门课程的货币不同。费率将通过一个名为rate example“rate=10.95”的新属性以XML硬编码。我已经把它们分类了,但根据价格,我没有考虑货币。< /P> 这是我的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>

XML技术
4000
12-03-2015
28-12-2015
理性选择
3000
12-03-2013
架构客户端/服务器
5000
10-01-2016
这是到目前为止我的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>


乳头
名称恢复表
类型
会议名称
大奖赛

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

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


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

我没有看到任何尝试在显示的XSLT代码中进行排序。如果您想转换不同货币的价格,您想从哪里获取汇率以转换,例如欧元到美元?汇率将是硬编码的,无需从第三方应用程序获取,我使用进行排序,但我删除了它,因为它只是根据数字进行排序。汇率将在XML中硬编码吗?或者XSLT?“rate将通过一个名为rate的新属性以XML硬编码”请编辑您的XML示例,以准确显示它的外观。非常感谢您,但您能否向我解释一下数据类型与此指令有什么关系,因为一旦我删除数据类型,如果您删除
数据类型
属性,它将不起作用,排序将默认为字母顺序。这确实有效——只是不是你想要的方式。