XSLTソートについての既存の記事をすべて見てきましたが、ソートの適切な判断はまだできません。 最初に子ノードをソート(降順)し、最初の(最大)子値に基づいて親ノードを降順で並べ替える必要があります。XSLTソート親ノードは最大子ノードに基づいています
だから、私は、最終的な順序NAME3、名1、Name2はが必要ですが、私は名1、NAME3、Name2はを持っています。
解決策を見つける手助けをしてください。前もって感謝します!
入力XML:
<collection>
<products>
<product>
<productCode>001</productCode>
<productName>Name1</productName>
<subProducts>
<subProduct>
<prices>
<price>
<totalPrice>264.28</totalPrice>
</price>
</prices>
</subProduct>
<subProduct>
<prices>
<price>
<totalPrice>264.28</totalPrice>
</price>
</prices>
</subProduct>
</subProducts>
</product>
<product>
<productCode>002</productCode>
<productName>Name2</productName>
<subProducts>
<subProduct>
<prices>
<price>
<totalPrice>231.99</totalPrice>
</price>
<price>
<totalPrice>231.99</totalPrice>
</price>
</prices>
</subProduct>
<subProduct>
<prices>
<price>
<totalPrice>231.99</totalPrice>
</price>
<price>
<totalPrice>231.99</totalPrice>
</price>
</prices>
</subProduct>
</subProducts>
</product>
<product>
<productCode>003</productCode>
<productName>Name3</productName>
<subProducts>
<subProduct>
<prices>
<price>
<totalPrice>234.92</totalPrice>
</price>
</prices>
</subProduct>
<subProduct>
<prices>
<price>
<totalPrice>734.12</totalPrice>
</price>
</prices>
</subProduct>
</subProducts>
</product>
</products>
</collection>
出力XML:(予想)
<products>
<product>
<productName>Name3</productName>
<price>734.12</price>
<price>234.92</price>
</product>
<product>
<productName>Name1</productName>
<price>264.28</price>
<price>264.28</price>
</product>
<product>
<productName>Name2</productName>
<price>231.99</price>
<price>231.99</price>
<price>231.99</price>
<price>231.99</price>
</product>
</products>
XSLT変換:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="/collection/products/product">
<xsl:sort select="subProducts/subProduct[1]/prices/price[1]/totalPrice" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="/collection/products/product">
<xsl:copy>
<productName>
<xsl:value-of select="productName"/>
</productName>
<xsl:apply-templates select="subProducts/subProduct/prices/price">
<xsl:sort select="totalPrice" order="descending" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="subProducts/subProduct/prices/price">
<xsl:copy>
<xsl:value-of select="totalPrice"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
間違ったXML出力:http://xsltransform.net/3Mvmrzh/1:
<products>
<product>
<productName>Name1</productName>
<price>264.28</price>
<price>264.28</price>
</product>
<product>
<productName>Name3</productName>
<price>734.12</price>
<price>234.92</price>
</product>
<product>
<productName>Name2</productName>
<price>231.99</price>
<price>231.99</price>
<price>231.99</price>
<price>231.99</price>
</product>
</products>
どのXSLTプロセッサを使用しますか?拡張機能をサポートしていない純粋なXSLT 1.0では、2回のパスでこれを行う必要があります。 –
@ michael.hor257k Xalanを使用する機会があります – MsPineapple