当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 代码进行排序的尝试。如果您想以不同的货币换算价格,您想从哪里获得汇率以进行换算,例如欧元兑美元? 费率将被硬编码,无需从第三方应用程序获取,我使用如果prix
元素具有rate
属性,那么您可能可以使用以下方式进行排序:
<xsl:sort select="prix * prix/@rate" data-type="number"/>
我说可能,因为我们没有输入 XML 的实际示例。
【讨论】:
它可以工作,非常感谢,但是你能向我解释一下 data-type 与这条指令有什么关系,因为一旦我删除了 data-type 它就不起作用了 如果您删除data-type
属性,排序将默认为字母顺序。这确实有效 - 只是不是您想要的方式。以上是关于当xml元素的值意味着不同的东西(如排序价格)但每个价格都有不同的货币时,如何对它们进行排序的主要内容,如果未能解决你的问题,请参考以下文章