XQuery有没有办法像tail()
这样的函数?XQuery中的tail()函数
我试图做到的是(使用“xdmp:文件系统文件($ PATH)”)来获取文件的内容,然后只显示最后100行。我似乎无法找到一个好办法做到这一点。有任何想法吗?
谢谢。
XQuery有没有办法像tail()
这样的函数?XQuery中的tail()函数
我试图做到的是(使用“xdmp:文件系统文件($ PATH)”)来获取文件的内容,然后只显示最后100行。我似乎无法找到一个好办法做到这一点。有任何想法吗?
谢谢。
在普通XQuery,这可以通过分割成线和从所述序列的末尾得到线的所希望的数目,则重新加入它们,如果需要的话,即
declare function local:tail($content as xs:string, $number as xs:integer)
{
let $linefeed := " "
let $lines := tokenize($content, $linefeed)
let $tail := $lines[position() > last() - $number]
return string-join($tail, $linefeed)
};
纯和短路来实现
for $numLines in count(tokenize(., '
'))
return
tokenize(., '
')[position() gt $numLines -100]
或者: - 的XPath 2.0解决方案不仅可以在XQuery的,但在XSLT或任何其他PL托管的XPath 2.0使用
for $numLines in count(tokenize(., '
'))
return
subsequence(tokenize(., '
'), $numLines -100 +1)
如果您xdmp:文件xx是文本文件的性质,那么你可以使用类似
let $f := 'any file system path'
return fn:tokenize(xdmp:filesystem-file($f), '[\n\r]+')[ fn:last() - 2 to fn:last()]
这里 我已经使用换行符&回车作为我的象征分离器。如果你需要别的东西来标记你可以。但简单的日志文件拖尾然后这个解决方案工作正常。
给出示例尾部给定文件的最后2行。如果你想更改fn:last() - 2到fn:last() - x
好问题,+1。查看我对两种不同的纯XPath 2.0解决方案的回答,这些解决方案比XQuery特定的解决方案更具可移植性和可用性。 :) – 2011-05-07 16:45:48