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
它不起作用。
答案 0 :(得分:0)
如果您愿意使用命令行工具,那么Xidel可以做您想要的事情。
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()
目前仅适用于英语和德语字符串。