XSLT将变量中的数据排序并将它们保存到另一个变量中

时间:2018-05-23 17:17:45

标签: xslt-1.0

我有问题。我有以下XML

<countryList> 
   <country>
      <name>Afghanistan</name>
      <population>29117000</population>
      <area>654329</area>
   </country>
   <country>
      <name>Albania</name>
      <population>3195000</population>
      <area>28748</area>
   </country>
   <country>
      <name>Algeria</name>
      <population>35423000</population>
      <area>2381741</area>
   </country>
   <country>
      <name>Andorra</name>
      <population>84082</population>
      <area>468</area>
   </country>
</countryList>

我有一个问题。我需要做的就是划分人口/面积并对每个国家的这些划分进行排序。但是,我试过这个

<xsl:variable name="Podiel">
        <xsl:value-of select="../population div ../area"/>
    </xsl:variable>

    <xsl:variable name="PodielPodiel">
        <xsl:for-each select="$Podiel">
            <xsl:sort select="." data-type="number" order="descending"/>
        </xsl:for-each>
    </xsl:variable>

但我仍然收到错误

The 'select' expression does not evaluate to a node set.
no result for data1.xml

有任何帮助吗?我只是想知道所有部门的最大值。 感谢。

1 个答案:

答案 0 :(得分:0)

不确定问题是否已解决,但是在XSLT 1.0中使用node-set时,必须使用扩展功能。有关XSLT 1.0中用法的更多详细信息,请参考node-set extension

如果输入XML中的country列表完全需要根据population div area的值进行排序,则可以在number()中使用<xsl:sort>函数。不需要声明变量并计算其他值,然后访问变量。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
    <xsl:output method="xml" />
    <xsl:strip-space elements="*" />

    <!-- identity transform -->
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="countryList">
        <xsl:copy>
            <xsl:apply-templates select="country">
                <xsl:sort select="number(population div area)" data-type="number" order="descending" />
            </xsl:apply-templates>
        </xsl:copy>     
    </xsl:template>
</xsl:stylesheet>

输出

<countryList>
    <country>
        <name>Andorra</name>
        <population>84082</population>
        <area>468</area>
    </country>
    <country>
        <name>Albania</name>
        <population>3195000</population>
        <area>28748</area>
    </country>
    <country>
        <name>Afghanistan</name>
        <population>29117000</population>
        <area>654329</area>
    </country>
    <country>
        <name>Algeria</name>
        <population>35423000</population>
        <area>2381741</area>
    </country>
</countryList>