Xquery结果未正确格式化

时间:2012-04-11 14:34:28

标签: xml formatting xquery xqilla

我刚刚开始在Xqilla上使用Xquery。

我希望我的结果会以正确的缩进和换行符返回。

我有一个名为$ duplicates的导演列表,我想在返回声明中从这些导演中获取所有电影片段。

我的回复声明:

for $duplicate in $duplicates
return 
    <movie director="{$duplicate}"> 
    {$result/videos/video/title[../director=$duplicate]}</movie>

我想要格式化(有点像):

<movie director="Coppola">
    <title>The Godfather</title>
    <title>The Godfather pt. 2</title>
    <title>Apocalypse Now</title></movie>

让孩子们正确缩进,每个都在一个新行上。

我得到的是:

<movie director="Coppola">
     <title>The Godfather</title><title>The Godfather pt. 2</title><title>Apocalypse Now</title></movie>

所有标题都在一行中。

因为我之前只是返回一个变量就成功返回了一个标题列表 我按照wikibooks的建议尝试了一个带有for循环的嵌套return语句。此解决方案还包含明确定义的<title> - 标记。

我在SO上找到了一个有同样问题here的人。

那里的答案没有用。当我添加一个命名空间时,我的程序完全停止输出。如果有一些非kludge解决方案(似乎是因为每个人似乎从一开始就获得了完美的输出),我也更喜欢它。

问题似乎是将XML和Xquery与大括号用法混合在一起。

1 个答案:

答案 0 :(得分:2)

这不是查询问题,而是设置为控制输出序列化的标志和选项。

您可能想要的是set the XQilla format-pretty-print flag to true,或者(对于XQuery 3.0)在您的序言中使用the indent XQuery serialization option,如下所示:

declare option output:indent "yes";

如果这是用于命令行的,并且您还没有XQuery 3.0支持,那么您也可以使用不同的漂亮打印工具(如果在XQilla中没有明确的方法来设置序列化选项) )。例如,输出到xmlstarlet fo的管道将在第二遍中打印出来。