我已经编写了一个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]
我尝试将非转义数据包装在大括号,括号等中,但我只是得到了不同的错误。正如我所说,我觉得我的查询结构错误了,但不知道该怎么做。
答案 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加载项:-/