CouchDB& E4X用于包含XML的文档

时间:2012-06-26 11:15:04

标签: xml couchdb e4x

我有一个CouchDB数据库(v1.2.0),其中包含以下文档:

{
   "_id": "pages/1",
   "_rev": "15-56ad5a5e879206edb04a7a62105dd25d",
   "content": "<html lang=\"en\"><head><title>Page Title</title></head></html>"
}

根据this article我应该写一个像这样的观点:

// by_lang
function(doc) {
    var html = new XML(doc.content);
    emit(html.@lang, {title: html.head.title.text()});
}

,从XML获取数据。

不幸的是,这不起作用。起初我虽然我下载的CouchDB二进制文件不包含包含E4X的SpiderMonkey,但事实并非如此。如果我添加log(html);语句,我可以看到XML已被正确解析(@ Erlang窗口)。

Erlang窗口说明我的代码错误的是:

Log :: function raised exception (new TypeError("String.prototype.toJSON called on incompatible XML", "../share/couchdb/server/main.js", 1138)) with doc._id pages/1

我打开了main.js文件,中断的代码如下:

// moving this away from global so we can move to json2.js later
toJSON : function (val) {
    return JSON.stringify(val);
},

Google搜索该错误后,我将this page提到了json2.js(在上面的代码中的注释中也提到了这一点。

任何想法如何解决这个问题?有没有机会这是一个错误,或者我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

认为问题是toJSON无法转换html.@lang对象的任何内容(在你调用.toString()之前它不是一个普通的字符串

因此,请将emit更改为包含toString()来电(请注意,我还将.text()来电更改为.toString()来电:

emit(html.@lang.toString(), {title: html.head.title.toString()});