XQuery的结构/将XML声明插入到输出中

时间:2014-05-23 01:38:38

标签: xml xquery

我已经编写了一个XQuery脚本,它完全符合我的要求。唯一的问题是我无法弄清楚如何让它在开始时输出XML声明。我可以使用包含

的脚本来使用它
unescaped-data('<?xml version="1.0" encoding="ISO-8859-1"?>')

但是,如果我把它放在我自己的脚本的开头,我就会抛出错误。我觉得这可能是由于我编写脚本的方式,但我对如何解决它感到茫然。

我不会发布整个剧本,因为我认为这在很大程度上是无关紧要的。但我会展示它是如何开始和结束的。

<feed>
{
    for $entry in doc('feed.xml')/entries/entry
    .
    .
    .
}
</feed>

我以明确的根元素&#39; feed&#39;启动它,我相信这可能是我的问题。 在unescaped-data('<?xml version="1.0" encoding="ISO-8859-1"?>')元素之前插入<feed>会出现此错误(使用Kawa 1.9.1)

myxq.xq:2:2: node test when context item is undefined [XPDY0002]
myxq.xq:3:1: saw unexpected '{' - assume you meant '(' [XPST0003]

我尝试将非转义数据包装在大括号,括号等中,但我只是得到了不同的错误。正如我所说,我觉得我的查询结构错误了,但不知道该怎么做。

2 个答案:

答案 0 :(得分:5)

您无法以这种方式强制执行XML声明。如果您使用 XML 作为输出方法,则默认情况下会自动生成XML声明 。如果您使用的是XQuery 1.0,请检查处理器配置和选项,以选择输出方法并打开或关闭omit-xml-declaration选项。 XML序列化在XQuery 1.0中是非标准的。

例如,如果您使用Saxon,则XML声明将作为XML输出方法的默认生成,您可以使用以下方式打开或关闭它的生成:

declare option saxon:output "omit-xml-declaration=no";

其他处理器可能会接受omit-xml-declaration="no"或命令行选项。

XQuery 3.0有一个序列化规范,所以如果您使用XQuery 3.0,您可以使用命名空间以标准方式控制这些选项:

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:omit-xml-declaration "no";

答案 1 :(得分:0)

您可能还想尝试禁用Adobe Acrobat加载项:-/