首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XPATH表达式以最后排序和返回匹配项。

XPATH表达式以最后排序和返回匹配项。
EN

Stack Overflow用户
提问于 2021-03-27 04:36:35
回答 2查看 83关注 0票数 0

我有一个XML,它是按照它的创建者确定的排序顺序创建的,它将一些类型的项放在列表的开头,我需要将它们显示在底部。

TypeID 4和6的数据在所有其他数据之前都有,我需要它们。例如XML是..。

代码语言:javascript
运行
复制
<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..。

代码语言:javascript
运行
复制
<xsl:for-each select="root/Item">
  <xsl:value-of select="Name"/>
</xsl:for-each>

我得把结果还给你..。

代码语言:javascript
运行
复制
Item 2-1
Item 10-1
Item 4-1
Item 4-2
Item 6-1

我很难在xsl:sort中使用和XPATH表达式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-27 05:52:22

为什么你不能简单地:

代码语言:javascript
运行
复制
<xsl:sort select="TypeID=4 or TypeID=6"/>

这将返回"true“作为您想要的最后一项,并且"true”按字母顺序排列在"false“之后。

或者用数字做同样的事情:

代码语言:javascript
运行
复制
<xsl:sort select="number(TypeID=4 or TypeID=6)" data-type="number"/>

或者完全避免排序,然后做:

代码语言:javascript
运行
复制
<xsl:apply-templates select="Item[not(TypeID=4 or TypeID=6)]/Name"/>
<xsl:apply-templates select="Item[TypeID=4 or TypeID=6]/Name"/>
票数 0
EN

Stack Overflow用户

发布于 2021-03-27 04:55:58

它不是很优雅,而且我知道永远不会有超过500个的结果,所以我发现这是可行的。

代码语言:javascript
运行
复制
<xsl:sort select="position() + (count(current()[TypeID = 4 or TypeID = 6]/TypeID) * 500)" data-type="number"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66828040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档