使用saxon9he在XQuery中输出文本:我如何得到“<”和“>”在输出中创建自己,没有逃脱?

时间:2016-08-01 16:03:22

标签: xquery saxon

我的XQuery脚本:

declare namespace output = "http://​www.​w3.​org/​2010/​xslt-​xquery-​ser​iali​zati​on"; 
declare option output:method "text"; 

for $row in all/row
return ('"<row>","',data($row),'"&#xA;')

我的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创建:

"&lt;row&gt;"," one "
 "&lt;row&gt;"," two "
 "&lt;row&gt;"," 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。

1 个答案:

答案 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”。