我的XQuery脚本:
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method "text";
for $row in all/row
return ('"<row>","',data($row),'"
')
我的XML:
<all>
<row>one</row>
<row>two</row>
<row>three</row>
</all>
我的命令行:
java -cp …/saxon9he.jar net.sf.saxon.Query '!omit-xml-declaration=yes' -s:./trouble-with-output-escaping.xml -q:./trouble-with-output-escaping.xqy
我的输出由saxon9he创建:
"<row>"," one "
"<row>"," two "
"<row>"," three "
我实际上想要输出如下:
"<row>","one"
"<row>","two"
"<row>","three"
在我的网络调查期间,我遇到了XSLT的禁用 - 输出 - 转义。 我想:如果XQuery有这个,那可能会有所帮助。
更新/ 0:
实际上上述XQuery脚本没有任何(可见)错误。 上面的名称空间声明需要替换为:
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
看起来一样,但事实并非如迈克尔指出的那样。
完成此操作后,以上是如何使用XQuery创建文本输出的示例。
在迈克尔展示的其他地方,如何摆脱用于分隔线的空间(0x20),即第2行前面的空格字符到结尾:
string-join(…,"")
其中“......”将是整个FLWOR。
答案 0 :(得分:1)
如果从命令行设置输出方法“text”,那就是正确的事情,即
java net.sf.saxon.Query -q:test.xquery -s:test.xml -t !method=text
但是让我感到困惑的是为什么在查询中设置序列化选项不起作用。但是,在调试器中查看它,我看到你的URI,看起来像
HTTP:// WWW W3组织/ 2010 / xslt- xquery- SER IALI zati上
实际上包含几次出现的十进制8203,十六进制200B,这是一个零宽度空间。这意味着URI与序列化输出URI不匹配,并且忽略了带有无法识别的URI的“declare option”。