XML xpath为特定类别的子项查找最大值

时间:2014-02-28 10:34:39

标签: java xml 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>

如何找到Act = Study的最长日期? 如何找到Act = Study的最短日期? 是否可以以任何调整的方式定义此xml

2 个答案:

答案 0 :(得分:0)

此XPath语句将从<A>元素返回<Child>元素Act=Study,其中Day值最大为//ACTS[Act='Study']/A/Day[not(. < //ACTS[Act='Study']/A/Day)][1]/..

<A>

,这个将返回Day元素,其值最小为//ACTS[Act='Study']/A/Day[not(. > //ACTS[Act='Study']/A/Day)][1]/..

&gt;

要了解如何选择最小值和最大值,请分别使用&lt;和{检查更简单的方案in this post(从答案中替换>< {1}})。

我使用该帖子中的相同概念来获取最小/最大<Day>元素,然后选择它的父<A>(最后使用/..)。

答案 1 :(得分:0)

使用 XPath 1.0 ,这是Java支持的唯一本机版本,您只能通过检查是否没有大于/小于他的元素来查找最大值/最小值。要查找最长日期的<A/>标记(或标记,如果它们共享值),请执行

//ACTS[Act='Study']/A[not(Day < //ACTS[Act='Study']/A/Day)]

请注意<运算符的“set-semantics”:如果左侧的任何元素小于任何元素在右侧。因此,如果没有其他具有更大值的<Day/>元素,则谓词将返回evaluate。

对于最小值,只需将运算符与>交换。

如果您可以嵌入像或BaseX这样的 XPath 2.0 能力的查询处理器,您可以使用更舒适(也可能更快)的查询

max(//ACTS[Act='Study']/A/Day)

要查找具有最大日期值的实际元素,请与最大值进行比较:

//ACTS[Act='Study']/A[Day = max(//ACTS[Act='Study']/A/Day)]