Xpath查找具有给定子项的最大值的元素

时间:2014-03-05 06:48:57

标签: java xpath

这是XML:

<root>
  <ACTS>
    <ACT>Play</ACT>
    <A>
      <Day>1</Day>
      <time>Fri Feb 28 13:21:42 IST 2014</time>
    </A>
    <A>
      <Day>2</Day>
      <time>Fri Feb 28 13:21:43 IST 2014</time>
    </A>    
  </ACTS>
  <ACTS>
    <ACT>Study</ACT>
    <A>
      <Day>1</Day>
      <time>Fri Feb 28 13:21:42 IST 2014</time>
    </A>
    <A>
      <Day>2</Day>
      <time>Fri Feb 28 13:21:43 IST 2014</time>
    </A> 
    <A>
      <Day>3</Day>
      <time>Fri Feb 28 13:21:43 IST 2014</time>
    </A>   
  </ACTS>
</root>

如何找到A = ACT的元素'Study'及其子元素,Day的值最大?这是Java程序:

String xp = "//ACTS[ACT='Study']/A[not(Day < //ACTS[ACT='Study']/A/Day)]";
XPathExpression expr = xpath.compile(xp);
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
if (null != nl && null != nl.item(0)) {
    String abc = nl.item(0).getChildNodes().item(0).getNodeValue();
    System.out.println(abc);
}

注意:使用此XPath,我可以通过

获得Day的最大值
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
if (null != nl && null != nl.item(0)) {
    maxAttemptNumber = nl.item(0).getTextContent();
} 

但需要帮助才能获得元素A及其子元素。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Java,那么您可以像使用XPath 2.0或XPath 1.0一样轻松使用XQuery(例如使用Saxon库)。答案是

(for $a in //ACTS[ACT="Study"]/A
order by number($a/Day))[last()]