2

根据这个:

http://www.xmlplease.com/xquery-xhtml

“如果可用,XQuery 没有设置序列化参数的标准方法。在 XQuery 中,我们必须查找 XQuery 处理器的适当文档,以了解实现了哪些序列化参数(如果有),以及如何准确使用它们。如果可用,它们“通常可以在命令行中设置。通常它们也可以在 XQuery 文档中使用。”

在撒克逊你可以写类似

declare option saxon:output "omit-xml-declaration=yes";

但没有提及如何在 Zorba XQuery 中执行此操作。你能帮我吗?谢谢你。

4

4 回答 4

4

Zorba 还没有实现用于序列化的 XQuery 3.0 prolog 选项。

配置序列化程序的唯一方法是使用命令行界面(例如 --omit-xml-declaration)或宿主语言(例如 C++ API)。

XQuery_t lQuery = aZorba->compileQuery("for $i in (1 to 3) return <a> { $i } </a>");

Zorba_SerializerOptions lSerOptions;
lSerOptions.omit_xml_declaration = ZORBA_OMIT_XML_DECLARATION_YES;

lQuery->execute(std::cout, &lSerOptions);

或者,您可以将结果显式序列化为字符串

fn:serialize($result,
  <output:serialization-parameters>
    <output:indent value="yes"/>
    <output:method value="xml"/>
    <output:omit-xml-declaration value="yes"/>
  </output:serialization-parameters>
)

然后在命令行界面使用文本序列化方法(--serialize-text)输出这个字符串。

于 2012-02-16T18:10:05.990 回答
1

这是新的官方 XQuery 3.0 语法,一些 XQuery 实现已经支持它(所以我猜它很快就会在 Zorba 中实现?):

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:omit-xml-declaration "yes";
"your query"
于 2012-02-16T16:41:59.097 回答
0

根据文档(http://www.zorba-xquery.com/html/documentation/2.1.0/zorba/indexpage#w3cspecs)Zorba 应该支持序列化规范(http://www.w3.org/TR/ xslt-xquery-序列化/#serparam)。在这种情况下,如果我没记错的话,应该是:

declare option omit-xml-declaration "yes";

于 2012-02-16T15:36:43.380 回答
0

我认为 zorba 不使用options 来设置序列化参数。相反,您必须将这些参数设置为您正在使用的序列化函数的参数。

例如,要使用 zorba 2.x 将一些 XML 序列化为文件,您可以使用该file:write()函数。该函数接受三个参数:

  • 要写入的文件,
  • 要写的内容,
  • 和序列化参数:

编辑:我认为它看起来像这样:

file:write (
    '/tmp/test.xml', 
    $content, 
    <serialization-parameters>
        <omit-xml-declaration>yes</omit-xml-declaration>
    </serialization-parameters> 
)

这类似于 zorba 的 1.4.0 版本,它ser:serialize()在 serialize 模块中提供了一个通用函数。一般来说,这不仅是特定于应用程序的,也是特定于版本的,因此了解您正在使用的 zorba 版本可能会有所帮助。

编辑:如果您使用的是命令行实用程序,则可以使用该选项--serialization-parameter, -z来设置序列化参数:

zorba -z omit-xml-declaration=yes -f -q my_xquery.xq
于 2012-02-16T17:06:45.757 回答