xml - 如何基于xslt中以“pro_”开头的属性值选择max xml属性?

标签 xml xpath

我对获取以指定字符串开头的最大值有一个怪异的要求。下面是我的示例源代码,如我们所见,book元素具有一个名为id的属性,如我们所见,id属性的某些值以“ pro_”开头,例如pro_60,pro_55,而其他属性值只是纯数字,例如70,40。

所以我的问题是如何获取以pro_开头的属性值,该数字为最大数。在此示例中,以pro_开头的最大数为65,因此预期结果为pro_65,我可以在中执行此操作代码,但我想知道我们是否可以仅使用来完成?任何帮助都非常有用!

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/

相关文章:

xml - xsd 验证同时提示缺少属性和错误属性

xml - 为什么不是 xsl :for-each select ="" working with this xml file?

php - 使用 PHP 进行 Xpath 查询(取两个值)

xml - 如果属性值不等于某些值,如何获取它们?

xml - XSL 在 for-each 中按属性查找元素

java - 获取太多子节点无法获取属性

java - XStream如何处理不同的 child ?

c# - XPath 表达式在 HtmlAgilityPack 中不起作用

具有多个后代条件的 Xpath

android - 如何为我的自定义按钮设置点击状态?