在XQuery中是否有一种类似于tail()函数的方法?
我试图完成的是获取文件的内容(使用"xdmp:filesystem-file($path)"),然后只显示最后100行)。我似乎找不到一个好办法来做这件事。有什么想法吗?
谢谢。
发布于 2011-05-07 07:56:52
在普通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)
};发布于 2011-05-07 16:40:42
--纯短的XPath 2.0解决方案--不仅可以在XQuery中使用,也可以在XSLT或托管XPath 2.0的其他PL中使用:
for $numLines in count(tokenize(., '
'))
return
tokenize(., '
')[position() gt $numLines -100]或
for $numLines in count(tokenize(., '
'))
return
subsequence(tokenize(., '
'), $numLines -100 +1)发布于 2011-05-08 14:38:12
如果xdmp: file -xx是文本文件的性质,那么您可以使用以下内容
let $f := 'any file system path'
return fn:tokenize(xdmp:filesystem-file($f), '[\n\r]+')[ fn:last() - 2 to fn:last()]在这里,我使用换行符和回车作为我的令牌分配器。如果你需要其他东西来标记你可以。但是简单的日志文件跟踪,那么这个解决方案工作得很好。
给定的示例尾尾为给定文件的2行。如果您想要的不仅仅是将fn: want ()-2改为fn:want()-x
https://stackoverflow.com/questions/5916246
复制相似问题