CouchDB 以 XML 格式返回数据
Posted
技术标签:
【中文标题】CouchDB 以 XML 格式返回数据【英文标题】:CouchDB Return data as XML 【发布时间】:2012-11-29 16:11:40 【问题描述】:我正在尝试使用 CouchDB,但我对它很陌生。
我存储了数据,我想查询它并以 XML 格式返回数据。
我是写视图还是显示函数?蒲团哪里写了show函数?
有人有例子吗?
【问题讨论】:
蒲团还没有一个很好的界面来编写显示/列表函数。但是,您走在正确的轨道上,使用显示/列表功能是要走的路,我建议使用 CouchApp 或其他东西,这样您就可以将代码保存在文件中。 谢谢 Dominic 使用 CouchApp 更简单。只是想确定一下,因为我不想陷入无限的工具中。 【参考方案1】:如果您不想使用 CouchApp 并且只想将您的视图作为 xml 格式获取,您可以使用这个衬里 (-ish) 列表:
"xml": "function element(name, row)send('<' + name + '>\\n'); for(field in row) if (typeof(row[field])=='object') element(field, row[field]) else send('<field name=\"' + field + '\">'); send((''+row[field]).replace(/&/g,'&').replace(/</g,'<')); send('</field>\\n'); send('</' + name + '>\\n');; function(head, req) provides('xml', function() send('<xml>\\n'); while (row=getRow()) element('row', row) send('</xml>'); ); "
我将它保留为一行,因为它必须作为一行函数输入到设计文档中。
创建设计文档
如果您还没有设计文档,最简单的创建方法是在蒲团临时视图和 [另存为...] 您选择的 design_document_name 和您选择的 view_name 中创建一个视图。我将在此使用设计文档“select”和一个名为“by_id”的视图。我的 by_id 视图如下所示:
function(doc)
emit(doc._id, null);
将列表输入设计文档
创建完成后,从蒲团的下拉菜单中选择查看“设计文档”。单击新(可能)创建的设计文档_design/select。
选择选项卡 Source 并双击 Source。在“views”之前再次单击:...并确保将插入符号放在那里。
在该行上方新建一行并输入:
"lists":
|
在花括号的中间(管道字符所在的位置)从上方粘贴单行。保存文档。
使用新列表并获取 XML
现在您可以从任何视图以 XML 格式获取任何数据。请注意,您只能直接使用视图而不是整个数据库内容,即使我的视图就是这样做的。
要查看您的数据,请在浏览器中使用此 URL:
http://localhost:5984/content/_design/select/_list/xml/by_id?include_docs=true&limit=10
参数 include_docs=true 使每个文档成为结果列表的一部分。这是标准的 CouchDB 功能。
参数 limit=10 将结果列表保持在最多 10 个文档,以限制大型数据库所需的时间。
如果视图中有 reduce 函数,也可以输入参数 reduce=false。
它在我的电脑上的样子
当我直接使用视图时,我有一个如下所示的数据库:
url=localhost:5984/cartoons/_design/select/_view/by_id?include_docs=true
"total_rows":6,"offset":0,"rows":[
"id":"Batman","key":"Batman","value":null,"doc":"_id":"Batman","_rev":"1-0ec5a1032c2fa8486c921924e13a31cf","publisher":"DC Comics",
"id":"Donald Duck","key":"Donald Duck","value":null,"doc":"_id":"Donald Duck","_rev":"1-1c431dfb2c46991ec999743830a5363b","publisher":"Walt Disney",
"id":"Iron Man","key":"Iron Man","value":null,"doc":"_id":"Iron Man","_rev":"1-4f3a3d862b3601a74d6277f4be930e33","publisher":"Marvel Comics",
"id":"Mickey Mouse","key":"Mickey Mouse","value":null,"doc":"_id":"Mickey Mouse","_rev":"1-1c431dfb2c46991ec999743830a5363b","publisher":"Walt Disney",
"id":"Spider-Man","key":"Spider-Man","value":null,"doc":"_id":"Spider-Man","_rev":"1-4f3a3d862b3601a74d6277f4be930e33","publisher":"Marvel Comics",
"id":"Superman","key":"Superman","value":null,"doc":"_id":"Superman","_rev":"1-0ec5a1032c2fa8486c921924e13a31cf","publisher":"DC Comics"
]
在 XML 中
url=localhost:5984/cartoons/_design/select/_list/xml/by_id?include_docs=true
<xml>
<row>
<field name="id">Batman</field>
<field name="key">Batman</field>
<value>
</value>
<doc>
<field name="_id">Batman</field>
<field name="_rev">1-0ec5a1032c2fa8486c921924e13a31cf</field>
<field name="publisher">DC Comics</field>
</doc>
</row>
<row>
<field name="id">Donald Duck</field>
<field name="key">Donald Duck</field>
<value>
</value>
<doc>
<field name="_id">Donald Duck</field>
<field name="_rev">1-1c431dfb2c46991ec999743830a5363b</field>
<field name="publisher">Walt Disney</field>
</doc>
</row>
<row>
<field name="id">Iron Man</field>
<field name="key">Iron Man</field>
<value>
</value>
<doc>
<field name="_id">Iron Man</field>
<field name="_rev">1-4f3a3d862b3601a74d6277f4be930e33</field>
<field name="publisher">Marvel Comics</field>
</doc>
</row>
<row>
<field name="id">Mickey Mouse</field>
<field name="key">Mickey Mouse</field>
<value>
</value>
<doc>
<field name="_id">Mickey Mouse</field>
<field name="_rev">1-1c431dfb2c46991ec999743830a5363b</field>
<field name="publisher">Walt Disney</field>
</doc>
</row>
<row>
<field name="id">Spider-Man</field>
<field name="key">Spider-Man</field>
<value>
</value>
<doc>
<field name="_id">Spider-Man</field>
<field name="_rev">1-4f3a3d862b3601a74d6277f4be930e33</field>
<field name="publisher">Marvel Comics</field>
</doc>
</row>
<row>
<field name="id">Superman</field>
<field name="key">Superman</field>
<value>
</value>
<doc>
<field name="_id">Superman</field>
<field name="_rev">1-0ec5a1032c2fa8486c921924e13a31cf</field>
<field name="publisher">DC Comics</field>
</doc>
</row>
</xml>
【讨论】:
以上是关于CouchDB 以 XML 格式返回数据的主要内容,如果未能解决你的问题,请参考以下文章