假设我正在从一种任意的XML格式转换为HTML格式,我希望按照人口数量(跨越两大洲的国家/地区)的名称对各大洲名称进行排序。
我只能使用(老师的约束):
decimal-format,output, template, sort, variable, for-each, value-of, format
所以我不能使用“xsl:for-each-group”。
以下是我正在研究的示例XML结构:
<monde>
<pays superficie="647500" code="AFG" capital="cty-Afghanistan-Kabul" continent="asia">
<nom>Afghanistan</nom>
<population>22664136</population>
<frontieres>
<frontiere codePays="TJ" longueur="76"/>
<frontiere codePays="IR" longueur="936"/>
<frontiere codePays="PK" longueur="2430"/>
<frontiere codePays="TAD" longueur="1206"/>
<frontiere codePays="TM" longueur="744"/>
<frontiere codePays="UZB" longueur="137"/>
</frontieres>
<religions>
<religion pourcentage="99">Muslim</religion>
</religions>
<villes>
<ville>
<nom>Kabul</nom>
<population>892000</population>
</ville>
</villes>
</pays>
<pays superficie="28750" code="AL" capital="cty-cid-cia-Albania-Tirane"
continent="europe"> ...
有些国家遍布两大洲:
<pays superficie="780580" code="TR" ...
continent="europe asia">
...
我们需要的输出示例
<table>
<tr>
<td>africa</td><td>667 586 143</td>
<td>america</td><td>784 256 501</td>
<td>asia</td><td>3 231 410 618</td>
<td>australia</td><td>29 765 885</td>
<td>europe</td><td>580 580 439</td>
</tr>
</table
如何以优雅的方式解决这个问题?
答案 0 :(得分:0)
我不知道这个解决方案有多优雅,但它会为您提供您正在寻找的输出,它只使用您受限的元素。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="monde">
<table>
<tr>
<td>Africa</td>
<td>
<xsl:value-of select="sum(pays[contains(@continent,'africa')]/population)" />
</td>
<td>America</td>
<td>
<xsl:value-of select="sum(pays[contains(@continent,'america')]/population)" />
</td>
<td>Asia</td>
<td>
<xsl:value-of select="sum(pays[contains(@continent,'asia')]/population)" />
</td>
<td>Australia</td>
<td>
<xsl:value-of select="sum(pays[contains(@continent,'australia')]/population)" />
</td>
<td>Europe</td>
<td>
<xsl:value-of select="sum(pays[contains(@continent,'europe')]/population)" />
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
这样做是使用predicate仅对population
值包含您想要求的大陆名称的每个国家/地区的continent
求和。因此,如果列出多个大陆,则会多次计算相同的人口数。