代码之家  ›  专栏  ›  技术社区  ›  Ranhiru Jude Cooray

将元素与属性的最大值匹配的XPath

  •  3
  • Ranhiru Jude Cooray  · 技术社区  · 14 年前
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <users>
    
    <user number="0775547857">
       <step stepnumber="1">complete</step>
       <step stepnumber="2">complete</step>
       <step stepnumber="3">complete</step>
    </user>
    
    <user number="0775543754">
       <step stepnumber="1">complete</step>
       <step stepnumber="2">complete</step>
    </user>
    
    <user number="0777743059">
       <step stepnumber="1">complete</step>
    </user>
    
    </users>
    

    到目前为止我得到的是 //user[@number='0775547857']/step[@stepnumber]

    例如:如果我给数字 0775547857 ,最大步数为 3 以及 0775543754 它是 2

    提前很多时间。

    //user[@number='0772243950']/step[fn:max((@stepnumber))]
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   Dimitre Novatchev    14 年前

    max() 函数仅在XPath2.0及更高版本中定义。

    查找最大步长的XPath 2.0表达式 step user 有一个 number 有值属性 $pNum :

    max(/*/user[@number=$pNum]/step/@stepnumber/xs:integer(.))
    

    $pnum 具有 0775547857

    <users>
        <user number="0775547857">
            <step stepnumber="1">complete</step>
            <step stepnumber="11">complete</step>
            <step stepnumber="2">complete</step>
            <step stepnumber="3">complete</step>
        </user>
        <user number="0775543754">
            <step stepnumber="1">complete</step>
            <step stepnumber="2">complete</step>
        </user>
        <user number="0777743059">
            <step stepnumber="1">complete</step>
        </user>
    </users>
    

    产生想要的正确结果 :

    11
    

    注意事项 xs:integer(.) 3 将比 11

    在XPath1.0中,下面的XPath表达式返回所需的最大值 :

    /*/user[@number=$pNum]/step
                [not(@stepnumber
                    <
                     ../step/@stepnumber
                     )
                ]
                  /@stepnumber
    
        2
  •  0
  •   Adam Crume    14 年前

    fn:max(//user[@number='0775547857']/step[@stepnumber])