最短的XPath,用于查找兄弟dateTime节点的最小/最大值

let*_*aik 1 xml xpath datetime xpath-2.0

我有以下简单的xml:

<root>
 <item>
  <d>2002-05-30T09:00:00</d>
 </item>
 <item>
  <d>2005-05-30T09:00:00</d>
 </item>
 <item>
  <d>2003-05-30T09:00:00</d>
 </item>
</root>
Run Code Online (Sandbox Code Playgroud)

现在我想找到使用XPath的最小或最大dateTime节点.

我现在的解决方案是:

/root/item[not(number(translate(./d, 'TZ:-', '.')) <= number(translate(following-sibling::item, 'TZ:-', '.')))][not(number(translate(./d, 'TZ:-', '.')) <= number(translate(preceding-sibling::item, 'TZ:-', '.')))][1]/d
Run Code Online (Sandbox Code Playgroud)

它有效,但是很难看,而且效率不高.基本上它将dateTime转换为数字,然后将它们相互比较.我从这里改编了这个.

最好的方法是什么?

干杯

小智 11

你不能在XPath 1.0中如果你事先不知道它的数量,item因为每个函数都有一个没有node-set参数的东西,它的参数会占用node-set中的第一个节点,而order comparison运算符不能用于字符串.

在XPath 2.0中,您可以使用:

max(/root/item/d/xs:dateTime(.))
Run Code Online (Sandbox Code Playgroud)