XSL for-each with sort
自从我处理XPath / XSL以来已经有一段时间了,我似乎无法对循环进行"排序"。在下面的示例XML中,我要基于" TextValue"属性的值进行排序,其中" ExternalName"为" isDefault"。因此,通过示例XML和首次排序尝试,我期望按照" Blah2"然后" Blah1"的顺序进行迭代。我尝试了许多变体,甚至尝试仅对元素值进行排序,但似乎无法进行任何排序。任何帮助将不胜感激。
XML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <ProductsExport> <ProductExport> <ProductId>1</ProductId> <ProductCode>Blah1</ProductCode> <ProductType>Apparel</ProductType> <Attributes> <Attribute TextValue="Yes" ExternalName="Something" LocaleID="Default"/> <Attribute TextValue="No" ExternalName="isDefault" LocaleID="Default"/> </Attributes> </ProductExport> <ProductExport> <ProductId>2</ProductId> <ProductCode>Blah2</ProductCode> <ProductType>Apparel</ProductType> <Attributes> <Attribute TextValue="Yes" ExternalName="Something" LocaleID="Default"/> <Attribute TextValue="Yes" ExternalName="isDefault" LocaleID="Default"/> </Attributes> </ProductExport> </ProductsExport> |
排序尝试:
1 2 3 4 | <xsl:sort select="./Attributes/Attribute[@ExternalName = 'isDefault']/@TextValue" order="descending"/> <xsl:sort select="/ProductsExport/ProductExport/@ProductCode"/> <xsl:sort select="@ProductCode"/> <xsl:sort select="./ProductsExport/ProductExport/@ProductCode"/> |
您的XPath尝试将
1 2 3 4 5 6 7 8 9 10 | <xsl:template match="/"> <ProductsExport> <xsl:for-each select="ProductsExport/ProductExport"> <xsl:sort select="./Attributes/Attribute[@ExternalName = 'isDefault']/@TextValue" order="descending"/> <xsl:sort select="./ProductCode"/> <xsl:copy-of select="."/> </xsl:for-each> </ProductsExport> </xsl:template> |
...示例输入...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <ProductsExport> <ProductExport> <ProductCode>BlahD</ProductCode> <Attributes> <Attribute TextValue="Yes" ExternalName="isDefault" LocaleID="Default"/> </Attributes> </ProductExport> <ProductExport> <ProductCode>BlahC</ProductCode> <Attributes> <Attribute TextValue="No" ExternalName="isDefault" LocaleID="Default"/> </Attributes> </ProductExport> <ProductExport> <ProductCode>BlahB</ProductCode> <Attributes> <Attribute TextValue="Yes" ExternalName="isDefault" LocaleID="Default"/> </Attributes> </ProductExport> <ProductExport> <ProductCode>BlahA</ProductCode> <Attributes> <Attribute TextValue="No" ExternalName="isDefault" LocaleID="Default"/> </Attributes> </ProductExport> </ProductsExport> |
...示例输出...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <ProductsExport> <ProductExport> <ProductCode>BlahB</ProductCode> <Attributes> <Attribute TextValue="Yes" ExternalName="isDefault" LocaleID="Default" /> </Attributes> </ProductExport> <ProductExport> <ProductCode>BlahD</ProductCode> <Attributes> <Attribute TextValue="Yes" ExternalName="isDefault" LocaleID="Default" /> </Attributes> </ProductExport> <ProductExport> <ProductCode>BlahA</ProductCode> <Attributes> <Attribute TextValue="No" ExternalName="isDefault" LocaleID="Default" /> </Attributes> </ProductExport> <ProductExport> <ProductCode>BlahC</ProductCode> <Attributes> <Attribute TextValue="No" ExternalName="isDefault" LocaleID="Default" /> </Attributes> </ProductExport> </ProductsExport> |