1

我刚刚开始将 Xquery 与 Xqilla 一起使用。

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

我有一个名为 $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>

所有标题都在一行中。

由于我之前通过简单地返回一个变量成功地返回了一个标题列表,因此我尝试了一个带有 for 循环的嵌套 return 语句,如wikibooks上所建议的那样。该解决方案还包含明确定义<title>的 -tags。

我在 SO 上发现了一个有同样问题的人

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

问题似乎在于将 XML 和 Xquery 与大括号的使用混合在一起。

4

1 回答 1

2

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

您可能想要将 XQillaformat-pretty-print标志设置为 true,或者(对于 XQuery 3.0)在 prolog 中使用XQueryindent序列化选项,如下所示:

declare option output:indent "yes";

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

于 2012-04-11T21:36:26.453 回答