我有一个XML,它是按照它的创建者确定的排序顺序创建的,它将一些类型的项放在列表的开头,我需要将它们显示在底部。
TypeID 4和6的数据在所有其他数据之前都有,我需要它们。例如XML是..。
<root>
<Item>
<TypeID>4</TypeID>
<Name>Item 4-1</Name>
</Item>
<Item>
<TypeID>4</TypeID>
<Name>Item 4-2</Name>
</Item>
<Item>
<TypeID>6</TypeID>
<Name>Item 6-1</Name>
</Item>
<Item>
<TypeID>2</TypeID>
<Name>Item 2-1</Name>
</Item>
<Item>
<TypeID>10</TypeID>
<Name>Item 10-1</Name>
</Item>
</root>
鉴于XSTL..。
<xsl:for-each select="root/Item">
<xsl:value-of select="Name"/>
</xsl:for-each>
我得把结果还给你..。
Item 2-1
Item 10-1
Item 4-1
Item 4-2
Item 6-1
我很难在xsl:sort中使用和XPATH表达式。
发布于 2021-03-27 05:52:22
为什么你不能简单地:
<xsl:sort select="TypeID=4 or TypeID=6"/>
这将返回"true“作为您想要的最后一项,并且"true”按字母顺序排列在"false“之后。
或者用数字做同样的事情:
<xsl:sort select="number(TypeID=4 or TypeID=6)" data-type="number"/>
或者完全避免排序,然后做:
<xsl:apply-templates select="Item[not(TypeID=4 or TypeID=6)]/Name"/>
<xsl:apply-templates select="Item[TypeID=4 or TypeID=6]/Name"/>
发布于 2021-03-27 04:55:58
它不是很优雅,而且我知道永远不会有超过500个的结果,所以我发现这是可行的。
<xsl:sort select="position() + (count(current()[TypeID = 4 or TypeID = 6]/TypeID) * 500)" data-type="number"/>
https://stackoverflow.com/questions/66828040
复制相似问题