首页 > 解决方案 > XPATH 表达式最后排序并返回匹配项

问题描述

我有按照创建者确定的排序顺序创建的 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

我正在努力使用 XPATH 表达式在 xsl:sort 中使用。

标签: xmlxsltxpath

解决方案


它不是很优雅,而且我知道结果永远不会超过 500 个,所以我发现这个工作..

<xsl:sort select="position() + (count(current()[TypeID = 4 or TypeID = 6]/TypeID) * 500)" data-type="number"/>

推荐阅读