Serialization XQuery和Zorba:从XQuery文档内部设置序列化参数
据此: “XQuery没有设置序列化参数的标准方法(如果可用)。在XQuery中,我们必须查找XQuery处理器的适当文档,以了解实现了哪些序列化参数(如果有的话),以及如何准确地使用它们。如果可用,它们通常可以在命令行中设置。通常,它们也可以从XQuery文档内部使用。” 在撒克逊,你可以写一些类似的东西Serialization XQuery和Zorba:从XQuery文档内部设置序列化参数,serialization,parameters,xquery,options,zorba,Serialization,Parameters,Xquery,Options,Zorba,据此: “XQuery没有设置序列化参数的标准方法(如果可用)。在XQuery中,我们必须查找XQuery处理器的适当文档,以了解实现了哪些序列化参数(如果有的话),以及如何准确地使用它们。如果可用,它们通常可以在命令行中设置。通常,它们也可以从XQuery文档内部使用。” 在撒克逊,你可以写一些类似的东西 declare option saxon:output "omit-xml-declaration=yes"; 但是在Zorba XQuery中没有提到如何实现这一点。您能帮忙吗?谢谢。
declare option saxon:output "omit-xml-declaration=yes";
但是在Zorba XQuery中没有提到如何实现这一点。您能帮忙吗?谢谢。根据文档(),Zorba应该支持序列化规范()。在这种情况下,如果我没有弄错的话,应该是:
declare option omit-xml-declaration "yes";
HTH!这是新的官方XQuery 3.0语法,一些XQuery实现已经支持它(所以我想它很快就会在Zorba中实现了?)
我认为zorba没有使用
选项
s来设置序列化参数。相反,您必须将这些参数设置为您正在使用的序列化函数的参数
例如,要使用zorba 2.x将某些XML序列化为文件,可以使用函数。此函数包含三个参数:
zorba -z omit-xml-declaration=yes -f -q my_xquery.xq
- 要写入的文件
- 要写的内容,
- 以及序列化参数:
file:write (
'/tmp/test.xml',
$content,
<serialization-parameters>
<omit-xml-declaration>yes</omit-xml-declaration>
</serialization-parameters>
)
Zorba还没有实现XQuery 3.0 prolog的序列化选项 <> P>配置串行化器的唯一方法是使用命令行接口(例如,省略XML声明)或宿主语言(例如C++ API)。
XQuery\u t lQuery=aZorba->compileQuery(“对于(1到3)中的$i,返回{$i}”);
Zorba_系列建议/建议;
lSerOptions.omit_xml_declaration=ZORBA_omit_xml_declaration_YES;
lQuery->execute(std::cout,&l选项);
或者,可以将结果显式序列化为字符串
fn:serialize($result,
<output:serialization-parameters>
<output:indent value="yes"/>
<output:method value="xml"/>
<output:omit-xml-declaration value="yes"/>
</output:serialization-parameters>
)
fn:serialize($result,
)
然后使用命令行界面中的文本序列化方法(--serialize text)输出此字符串。我得到以下错误:7,1:静态错误[err:XPST0081]:“忽略xml声明。”“:无法将命名空间前缀扩展到URI@david:是的,我担心答案中的选项名称缺少名称空间前缀。cgcg找到了正确的语法。@grtjin:…所以我最好还是保持这种方式;)我使用的是Zorba 2.1版。0@David:那么
file:write()
函数应该适合您。您可以为fn:serialize
函数设置序列化参数。是的,这是正确的语法。您可以在此处进行测试:
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>
)