xsl对3个子元素的平均值进行排序

时间:2011-04-30 14:42:24

标签: sorting xslt-1.0

我有以下xml。我想用XSL做的是对元素productDesignRating,productPriceRating和productPerfromanceRating的总值进行排序。到目前为止,没有运气试图完成这项工作。任何帮助将不胜感激我需要能够在xsl 1中执行此操作,因此没有xsl2功能。

    <DocumentElement xmlns="DotNetNuke/UserDefinedTable">
  <QueryResults>
    <productCategory>cat1</productCategory>
    <productTitle>product1</productTitle>
    <productImage>&lt;img alt="productImage" title="productImage" src="/skinconversion/Portals/12/babynokiko.jpg" /&gt;</productImage>
    <productDesignRating>3</productDesignRating>
    <productPriceRating>4</productPriceRating>
    <productPerformanceRating>4</productPerformanceRating>
    <productPrice>10</productPrice>
    <productSummary>description</productSummary>
    <productUrl>http://www.2dnn.com</productUrl>
  </QueryResults>
  <QueryResults>
    <productCategory>cat2</productCategory>
    <productTitle>product2</productTitle>
    <productImage>&lt;img alt="productImage" title="productImage" src="/skinconversion/Portals/12/babynokiko.jpg" /&gt;</productImage>
    <productDesignRating>3</productDesignRating>
    <productPriceRating>3</productPriceRating>
    <productPerformanceRating>3</productPerformanceRating>
    <productPrice>10</productPrice>
    <productSummary>description</productSummary>
    <productUrl>http://www.2dnn.com</productUrl>
  </QueryResults>
  <QueryResults>
    <productCategory>cat3</productCategory>
    <productTitle>product3</productTitle>
    <productImage>&lt;img alt="productImage" title="productImage" src="/skinconversion/Portals/12/babynokiko.jpg" /&gt;</productImage>
    <productDesignRating>1</productDesignRating>
    <productPriceRating>2</productPriceRating>
    <productPerformanceRating>3</productPerformanceRating>
    <productPrice>56</productPrice>
    <productSummary>description</productSummary>
    <productUrl>http://www.2dnn.com</productUrl>
  </QueryResults>
</DocumentElement>

1 个答案:

答案 0 :(得分:0)

试试这个:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:my="DotNetNuke/UserDefinedTable">
    <xsl:template match="node()">
        <xsl:copy>
            <xsl:apply-templates select="node()">
                <xsl:sort select="my:productDesignRating +  
                                  my:productPriceRating +  
                                  my:productPerformanceRating"
                    data-type="number"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

这只是一个简化的身份模板(不处理任何属性),但对3个指定子元素的值的总和应用数字排序 - 如果它们存在。

特别注意使用data-type属性,允许指定排序基数应该是数字,所以这里的顺序是6,9,11(对于字符串,默认情况下,它是11, 6,9)...

[要撤销订单,只需添加order="descending"属性]

即可