将每个XQuery结果放在一个新行上

时间:2012-02-07 19:12:32

标签: xml formatting xquery

是否可以将每个XQuery结果放在一个新行上?我想我记得有一个属性设置在文档的开头,但不记得了。 :/

我有这个.xq文件:

(: declare default element namespace "http://www.w3.org/2001/XMLSchema"; :)
for $x at $i in doc("zoo.xml")//animal
return <li>{$i}. {$x/name/text()}</li> 

我得到了正确的结果,但是当我真正想要这样的时候,所有这些结果都在一条线上:

<li>1. Zeus</li>
<li>2. Fred</li>
...

这可能吗?提前感谢您的回答! :)

4 个答案:

答案 0 :(得分:20)

...您可以添加换行符字符串作为return子句的第二部分:

(: declare default element namespace "http://www.w3.org/2001/XMLSchema"; :)
for $x at $i in doc("zoo.xml")//animal
return (<li>{$i}. {$x/name/text()}</li>, '&#xa;')

结果序列化的方式也取决于特定的XQuery处理器。

答案 1 :(得分:6)

XQuery 3.0提供了一个新的序列化选项item-separator,可以在查询序言中指定:

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:item-separator "&#xa;";

for $x at $i in doc("zoo.xml")//animal
return <li>{$i}. {$x/name/text()}</li> 

答案 2 :(得分:4)

您正在使用的XQuery引擎可能有缩进输出的选项。例如。在Zorba中,缩进选项的工作方式如下:

zorba -i -q 'for $x in 1 to 10 return <a/>'
<?xml version="1.0" encoding="UTF-8"?>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>

答案 3 :(得分:3)

XQuery 3.1 Serialization规范提供了新的&#34;自适应&#34;序列化模式,它在一个新行上输出每个XQuery结果。

某些XQuery处理器将此模式用作新默认值。