如何从XQuery中加载文本文件?

时间:2010-12-02 22:49:19

标签: text xquery saxon

是否有加载文本文件的XQuery命令?

我可以通过执行以下操作来加载xml文档;

declare variable $text := doc("test.xml");

但是,如果test.xml是一个结构良好的xml文档,它似乎才有用。我想要的是将一个普通的test.txt文件加载到一个字符串变量中。像这样的东西;

declare variable $str as xs:string := fn:loadfile("test.txt");

可以吗?

我正在使用撒克逊引擎,但我在撒克逊文档中找不到答案。

5 个答案:

答案 0 :(得分:2)

实际上,您可以在Zorba中找到文件函数的一个实现:http://www.zorba-xquery.com/doc/zorba-1.4.0/zorba/xqdoc/xhtml/www.zorba-xquery.com_modules_file.html

答案 1 :(得分:2)

XQuery 3.0具有函数fn:unparsed-text(最初在XSLT中定义),它完全符合您的要求。虽然XQuery 3.0仍在进行中,但是虽然XQuery 3.0处理器并不多,但许多XQuery处理器已经支持这个功能(包括Saxon)。

答案 2 :(得分:1)

在EXPath上有一个标准化工作。 XQuery File模块的规范已经存在,它能够执行您所描述的内容:EXPath File Module Spec

然而,我不知道有多少实现。 Saxon似乎不幸地实现它(或者,请指出它)。 zorba附带了一个示例实现(请参阅XQDoc Site of Zorba)。如果您想知道如何开始使用zorba,可以查看本教程:Get Started with XQuery and Zorba

答案 3 :(得分:0)

默认情况下XQuery(表示fn:namespace)不具有任何文件访问方法。

MarkLogic: xdmp:文件系统文件() xdmp:文件系统目录()

左巴:   已经由user457056提到

存在   Exist File Module

答案 4 :(得分:0)

自9.2版本以来,Saxon的扩展名为fn:collection,可用于读取未解析的文本。这是一个例子:

    collection('file:///c:/TEMP?select=text.txt;unparsed=yes')

这在9.2的“Changes in this Release”下描述。显然,功能库文档中没有提到它。然而它运作良好,我一直在使用它。