如何使用XPATH表达式比较格式为“ Sun,2010年6月20日10:45:05 GMT”的两个日期?

时间:2018-12-27 18:36:04

标签: xpath xpath-2.0

XML示例:

<book>
<item>
  <title>Book One</title> 
  <pubDate>Sun, 20 Jun 2010 10:45:05 GMT</pubDate>
</item>
<item>
  <title>Book Two</title> 
  <pubDate>Mon, 21 Jun 2010 11:40:03 GMT</pubDate>
</item>
<item>
  <title>Book Three</title> 
  <pubDate>Mon, 05 Jul 2010 10:45:05 GMT</pubDate>
</item>
</book>

我需要检索两个日期之间的节点,但是它们的格式如下:

Sun, 20 Jun 2010 10:45:05 GMT

如果我尝试

//book/item[pubDate > 'Sun, 20 Jun 2010 10:45:05 GMT' and pubDate < 'Mon, 05 Jul 2010 10:45:05 GMT']/title

它不起作用。

1 个答案:

答案 0 :(得分:0)

如果您愿意使用命令行工具,那么Xidel可以做您想要的事情。

x-parse-dateTime

  

x:parse-dateTime($input as xs:string, $format as xs:string) as xs:dateTime
  从给定格式的字符串中读取日期/时间。第二个参数$ format是标准的Pascal格式,使用的是ymdhnsz(例如“ yyyy-mm-dd”),而不是XQuery 3.0图片字符串。

$ cat <<EOF | xidel -s - -e '//book/item[let $a:=x:parse-dateTime(substring-after(pubDate,", "),"dd mmm yyyy hh:nn:ss") return $a > dateTime("2010-06-20T10:45:05") and $a < dateTime("2010-07-05T10:45:05")]/title'
<book>
    <item>
      <title>Book One</title>
      <pubDate>Sun, 20 Jun 2010 10:45:05 GMT</pubDate>
    </item>
    <item>
      <title>Book Two</title>
      <pubDate>Mon, 21 Jun 2010 11:40:03 GMT</pubDate>
    </item>
    <item>
      <title>Book Three</title>
      <pubDate>Mon, 05 Jul 2010 10:45:05 GMT</pubDate>
    </item>
</book>
EOF

Book Two

由于您现在正在比较日期时间,因此您还必须输入另外两个dateTime()

请注意,x:parse-dateTime()目前仅适用于英语和德语字符串。