XPath matches the element with the maximum attribute value

<?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>

Given the number, I want to find the maximum step number in the list of steps.

What I still know //user[@number='0775547857']/step[@stepnumber]

And I think I need to use the fn: max function, but I am having problems with how to use the max function, which passes a list of step numbers.

Example: if I give a number 0775547857, the maximum number of steps 3, and for 0775543754- 2etc.

Thanx in advance.

It is right?

//user[@number='0772243950']/step[fn:max((@stepnumber))]
+3
source share
2 answers

Function is max()defined only in XPath 2.0 and higher.

An XPath 2.0 expression that finds the maximum number for stepchildren userwith an attribute numberwith a value$pNum

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

$pNum 0775547857 XPath 2.0 XML:

<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.

XPath 1.0 XPath :

/*/user[@number=$pNum]/step
            [not(@stepnumber
                <
                 ../step/@stepnumber
                 )
            ]
              /@stepnumber
+1

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

0

Source: https://habr.com/ru/post/1755129/


All Articles