XSLT 1.0—对3个子元素的平均值进行XSL排序



我有以下xml。我想对XSL做的是对元素productDesignRating、productpricering和productperfromancreation的总价值进行输出排序。到目前为止,想要完成这项工作还没有运气。任何帮助将不胜感激,我需要能够在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>

试试这个:

<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"属性]

最新更新