xsl сортировка по среднему значению 3 дочерних элементов - PullRequest
0 голосов
/ 30 апреля 2011

У меня есть следующий 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 голосов
/ 30 апреля 2011

Попробуйте это:

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

...