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,'&amp;').replace(/</g,'&lt;'));  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 格式返回数据的主要内容,如果未能解决你的问题,请参考以下文章

调用 wcf 休息服务并以 xml 或 json 格式返回数据

Java WSDL以xml格式返回字符串

关于Ajax返回XML格式数据和JSON格式数据的疑问

springmvc返回xml格式json格式数据

Ajax返回数据格式

返回 XML 时使用 JSONP