我编写了一个XQuery脚本,它完全符合我的要求.唯一的问题是我无法弄清楚如何让它在开始时输出XML声明.我可以使用刚才包含的脚本
unescaped-data('<?xml version="1.0" encoding="ISO-8859-1"?>')
Run Code Online (Sandbox Code Playgroud)
但是,如果我把它放在我自己的脚本的开头,我会抛出错误.我有一种感觉,这可能是由于我编写脚本的方式,但我不知道如何解决它.
我不会发布整个剧本,因为我认为这在很大程度上是无关紧要的.但我会展示它是如何开始和结束的.
<feed>
{
for $entry in doc('feed.xml')/entries/entry
.
.
.
}
</feed>
Run Code Online (Sandbox Code Playgroud)
我用一个明确的根元素'feed'开始它,我相信这可能是我的问题.插入元素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]
Run Code Online (Sandbox Code Playgroud)
我尝试将非转义数据包装在括号,括号等中,但我只会得到不同的错误.正如我所说,我觉得我的查询结构"错误",但不知道该怎么办.
您无法以这种方式强制执行XML声明.如果您使用XML作为输出方法,则XML声明通常会自动生成为默认值.如果您使用的是XQuery 1.0,请检查处理器配置和选项,以选择输出方法并打开或关闭该omit-xml-declaration选项.XML序列化在XQuery 1.0中是非标准的.
例如,如果您使用Saxon,则XML声明将作为XML输出方法的默认生成,您可以使用以下命令打开或关闭它的生成:
declare option saxon:output "omit-xml-declaration=no";
Run Code Online (Sandbox Code Playgroud)
其他处理器可能会接受类似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";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |