自从我处理过XPath / XSL之后已经有一段时间了,我似乎无法排序'排序'使用循环。使用下面的示例XML,我想要做的是根据' TextValue'的值来排序。属性where' ExternalName'是' isDefault'。因此,使用示例XML和第一次排序尝试,我希望按照“Blah2'”的顺序进行迭代。然后' Blah1'。我尝试了很多变化,甚至尝试仅仅对元素值进行排序,但似乎无法使用任何类型。任何帮助将不胜感激。
XML:
<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>
排序尝试:
<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"/>
答案 0 :(得分:1)
您的XPath正在尝试作为属性ProductCode
访问@ProductCode
...它是一个元素。
<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>
...示例输入...
<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>
...示例输出......
<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>