我对获取以指定字符串开头的最大值有一个怪异的要求。下面是我的xml示例源代码,如我们所见,book元素具有一个名为id的属性,如我们所见,id属性的某些值以“ pro_”开头,例如pro_60,pro_55,而其他属性值只是纯数字,例如70,40。
所以我的问题是如何获取以pro_开头的属性值,该数字为最大数。在此示例中,以pro_开头的最大数为65,因此预期结果为pro_65,我可以在java中执行此操作代码,但我想知道我们是否可以仅使用xpath来完成?任何帮助都非常有用!
XPath版本是1.0。
<?xml version="1.0" encoding="UTF-8"?>
<datas>
<books>
<book id="pro_60">Java</book>
<book id="pro_55">Golang</book>
<book id="pro_40">PHP</book>
<book id="pro_65">C++</book>
<book id="pro_55">Python</book>
<book id="70">Javascript</book>
<book id="40">HTML5</book>
</books>
</datas>
最佳答案
简短的XPath 2.0表达式:
max(/*/*/*/@id[starts-with(.,'pro_')]/number(substring(.,5)))
这只是计算最大值。
要选择具有
id
属性且具有该最大值的所有元素,请使用:(/*/*/*[@id = concat('pro_', string(max(/*/*/*/@id[starts-with(.,'pro_')]/number(substring(.,5)))))]
对于XPath 1.0,无法使用单个XPath 1.0表达式进行计算。
关于xml - 如何基于xslt中以“pro_”开头的属性值选择max xml属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31316148/