首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLStarlet:使用小于/大于

XMLStarlet:使用小于/大于
EN

Stack Overflow用户
提问于 2016-03-01 17:32:46
回答 1查看 1.3K关注 0票数 0

XMLStarlet允许您使用小于/大于运算符来筛选属性值吗?例如,考虑这样的文档:

代码语言:javascript
复制
<xml>
<list>
    <node name="a" val="x" />
    <node name="b" val="y" />
    <node name="c" val="z" />
    etc.
</list>

{码}

是否有方法选择值大于"x“的节点?这个XPath似乎不适用于XMLStarlet 1.5.0:

代码语言:javascript
复制
//node[@val > 'x']

这一点也不是:

代码语言:javascript
复制
//node[@value gt 'x']
EN

回答 1

Stack Overflow用户

发布于 2016-03-01 18:58:02

在XPath 1.0中比较像它们是数字(ASCII值/UniCode代码点)这样的字符(不幸的是)是不可能的,如果对更多细节感兴趣,请看这个问题

因此,如果您的@val属性在XML中排序,您可以通过一个简单的XPath表达式在“相等”匹配之后选择所有节点来实现这一点:

代码语言:javascript
复制
//node[@val='x']/following-sibling::node

如果没有,则必须使用XSLT样式表。幸运的是,XMLStarlet能够应用XSL-样式表。我从他们的概述中引证:

  • 将XSLT样式表应用于XML文档(包括EXSLT支持,并将参数传递给样式表)

因此,您可以应用xsl:stylesheet来使用xsl:sort实现所需的结果,该xsl:sort能够按字符进行排序。

代码语言:javascript
复制
<xsl:template match="/list">
  <xsl:for-each select="//node">    <!-- all nodes sorted by 'val' attribute' -->
    <xsl:sort select="@val" data-type="text" order="ascending" case-order="upper-first"/>
    <xsl:value-of select="@name" /> <!-- or whatever output you desire -->
  </xsl:for-each>
</xsl:template>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35729529

复制
相关文章

相似问题

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