对于我正在编写的一段代码,我需要将XQuery的输出放在一行上。但是,XML标记非常冗长。这不是程序输出的问题,因为它不需要人类可读,但源代码(出于维护目的)当然需要是人类可读的。有没有一种很好的简洁方法可以将XQuery XML中的换行符放到输出中?我目前正在使用下面的工作。
您几乎可以忽略这些代码,但请注意,这会在处理时全部输出到一行。请注意,只要我想在源代码中使用换行符,就会插入常量'nl'。
let $nl := '';
<type><name>void</name></type> <name>{fn:string($className)}__{fn:string($requestReceived/@name)}__received</name>{$nl
}<parameter_list>(<param><decl><type><specifier>const</specifier> <name>{fn:replace($requestReceived/mt:input/@qtype,":","::")}</name> &{$nl
}</type><name>{fn:string($requestReceived/mt:input/@name)}</name></decl></param>,<param><decl><type><specifier>const</specifier> <name>{$nl
}{fn:replace($requestReceived/mt:input/@qtype,":","::")}</name> &</type><name>{fn:string($requestReceived/mt:output/@name)}</name></decl></param>)</parameter_list>;
有没有人有更好的选择?
答案 0 :(得分:1)
Zorba支持XQuery 3.0和序列化选项。以下内容也适用于所有其他XQuery 3.0引擎,我使用Zorba和BaseX进行了测试。
设置output:indent "no"
将停用每个结果的换行符。
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:indent "no";
<a><b/></a>
结果:
<a><b/></a>
如果您没有返回单个XML片段,但是还有一系列XML片段,还会设置output:item-separator ""
,这将删除其间的换行符:
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:indent "no";
declare option output:item-separator "";
(<a><b/></a>, <foo/>)
结果:
<a><b/></a><foo/>