1

我需要通过为同一级别的一个属性及其更高级别的父属性提供值来找到子属性的值。
另一个要求是
查找子属性的值,该子属性的另一个相同级别的属性具有最大值,并且为更高级别的父级指定值

这是我的 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>
`   

并且要求是通过将值设置为 Day=3 和 ACT =Study 来找到时间属性的值

在 ACT=Study 下找到 ACT =Study 和 Day= 最大值的时间

我对 xpath 进行了同样的尝试,结果一团糟(无法从 Nodelist 中检索值)。

有人请指导我xquery及其在java中的用法。

在这种情况下最好使用 xquery 或 xpath。

4

1 回答 1

4
let $x :=

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

XQuery -

let $maxDay := max($x//ACTS[ACT="Study"]/A/Day)
for $y in $x//ACTS[ACT/text()="Study"]/A[Day/text()=$maxDay]/time
 return $y

XPath -

//ACTS[ACT/text()="Study"]/A[Day/text()=max(//ACTS[ACT="Study"]/A/Day)]/time

你说 - “有人请指导我 xquery 及其在 java 中的用法。”

为此,请参阅以下帖子 -

  1. 如何在 Java 中使用 XPath 读取 XML

  2. 在 Java 中使用 XPath 解析 XML

假设您的 Java 代码是正确的,我认为您的 XPath 表达式会让您陷入混乱。顺便说一句,上面的链接将指导您确保 Java 代码的正确性。

您问 - “在这种情况下,xquery 或 xpath 哪个最好。”

谷歌“XQuery 和 XPath 之间的区别”,你会得到答案。

HTH :)

于 2014-03-12T05:44:45.247 回答