XMLStarlet允许您使用小于/大于运算符来筛选属性值吗?例如,考虑这样的文档:
<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:
//node[@val > 'x']这一点也不是:
//node[@value gt 'x']发布于 2016-03-01 18:58:02
在XPath 1.0中比较像它们是数字(ASCII值/UniCode代码点)这样的字符(不幸的是)是不可能的,如果对更多细节感兴趣,请看这个问题。
因此,如果您的@val属性在XML中排序,您可以通过一个简单的XPath表达式在“相等”匹配之后选择所有节点来实现这一点:
//node[@val='x']/following-sibling::node如果没有,则必须使用XSLT样式表。幸运的是,XMLStarlet能够应用XSL-样式表。我从他们的概述中引证:
因此,您可以应用xsl:stylesheet来使用xsl:sort实现所需的结果,该xsl:sort能够按字符进行排序。
<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>https://stackoverflow.com/questions/35729529
复制相似问题