XMLStarlet是否允许您使用小于/大于运算符来过滤属性值?例如,考虑这样的文档:
<xml>
<list>
<node name="a" val="x" />
<node name="b" val="y" />
<node name="c" val="z" />
etc.
</list>
{代码}
有没有办法选择值大于&#34; x&#34;?的节点?这个XPath似乎不适用于XMLStarlet 1.5.0:
//node[@val > 'x']
这也不是:
//node[@value gt 'x']
答案 0 :(得分:0)
比较像数字(ASCII值/ UniCode代码点)这样的字符(遗憾的是)在XPath 1.0中是不可能的,如果对更多细节感兴趣,请查看this SO question。
因此,如果您的@val
属性在XML中排序,则可以使用简单的XPath表达式选择“等于”匹配后的所有节点来实现此目的:
//node[@val='x']/following-sibling::node
如果没有,则必须使用XSLT样式表。幸运的是,XMLStarlet能够应用XSL-Stylesheets。我引用他们的概述:
因此,您可以使用xsl:sort
来应用xsl:stylesheet
来实现所需的结果,http://www.mywebsite.it能够按字符排序。
<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>