eXistdb JSON序列化

时间:2016-03-17 20:57:26

标签: json xml xquery exist-db

我已针对http://www.w3schools.com/xsl/books.xml

创建了一个XQuery
xquery version "3.0";
for $x in collection("/db/books")//book
return 
    <book title="{$x/title}">
    {$x//author}
    </book>

如果我在eXistdb的 eXide 中评估它,我会在预览窗格中获得合理的输出。

<book title="Everyday Italian">
   <author>Giada De Laurentiis</author>
etc.

如果我尝试“运行”它,我会在网络浏览器中收到以下错误:

This page contains the following errors:

error on line 4 at column 1: Extra content at the end of the document
Below is a rendering of the page up to the first error.

Giada De Laurentiis

我想也许我应该把它序列化为JSON 。基于http://exist-db.org/exist/apps/wiki/blogs/eXist/JSONSerializer的快速阅读,我在xquery版本行之后添加了以下两行:

declare namespace json="http://www.json.org";
declare option exist:serialize "method=json media-type=text/javascript";

但是我得到了相同的可接受的xml预览结果和相同的浏览器错误。

如何在Web浏览器中以XML或JSON格式获取输出?

我看了https://stackoverflow.com/questions/35038779/json-serialization-with-exist-db-rest-api,但没有看到如何将其作为起点。

2 个答案:

答案 0 :(得分:1)

我很高兴您发现最初的问题是浏览器需要格式良好的XML,而eXide很乐意向您展示任意节点。

关于JSON序列化的主题,简单地说(我在手机上),请参阅标题为“序列化”的部分中的http://exist-db.org/exist/apps/wiki/blogs/eXist/XQuery31。确保您正在运行eXist 3.0 RC1。

答案 1 :(得分:0)

需要顶级标记和一些额外的花括号:

xquery version "3.0";
declare namespace json="http://www.json.org";
declare option exist:serialize "method=json media-type=text/javascript";
<result> 
{for $x in collection("/db/books")//book
return 
    <book title="{$x/title}">
    {$x//author}
    </book>
}
</result>

或者,对于格式良好的XML序列化:

xquery version "3.0";
<result> 
{for $x in collection("/db/books")//book
return 
    <book title="{$x/title}">
    {$x//author}
    </book>
}
</result>

信用:http://edutechwiki.unige.ch/en/XQuery_tutorial_-_basics