如何将xml放入couchDB?

时间:2010-08-09 06:49:51

标签: xml couchdb

我想这样做:    1.将xml字符串输出到couchdb服务器。类似的东西:

curl -X PUT  http://localhost:5984/db/_design/app/_update/echo/h1
-d "<doc><name1>value1</name1><name2>value2</name2></doc>"
  1. 在couchdb服务器端,我将xml字符串解析为json对象。
  2. 将json对象保存为文档。
  3. 这可能吗?我该怎么做?

    谢谢!

2 个答案:

答案 0 :(得分:6)

我找到了另一种方法,这里是样本:

  1. 创建db

    curl -X PUT http://localhost:5984/bookstore

  2. 创建设计文档

    curl -X POST http://localhost:5984/bookstore/_bulk_docs -d @design.doc

  3. 其中design.doc的内容是:

    {"docs":
      [
        {
            "_id": "_design/app",
            "updates": {
                "xml2json": "
                  function (doc, req) {
                    if(req.query.doc == null) {
                      return [null, \"doc is null!\\n\"];
                    }
                    var xmlDoc = req.query.doc.replace(/^<\?xml\s+version\s*=\s*([\"'])[^\1]+\1[^?]*\?>/, \"\");
                    var html = new XML(xmlDoc);
                    if(doc==null) {
                      doc = {};
                      doc._id=html.BookList.BookData.@isbn13.toString();
                      if(doc._id==null||doc._id==\"\") {
                        doc._id=html.BookList.BookData.@isbn.toString();
                      }
                    }
                    if (doc._id == null || doc._id == \"\") {
                      return [null, \"doc id is null!\\n\"];;
                    }
                    doc.title = html.BookList.BookData.Title.text();
                    doc.longtitle = html.BookList.BookData.TitleLong.text();
                    doc.authors = html.BookList.BookData.AuthorsText.text();
                    doc.publisher = html.BookList.BookData.PublisherText.text();
                    return [doc, \"ok!\\n\"];
                  }"
            }
        }
      ]
    }
    
    1. test _update

      doc=$(cat isbndb.sample); doc="$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$doc")"; curl -X PUT http://localhost:5984/bookstore/_design/app/_update/xml2json/9781935182320?doc="$doc"

    2. isbndb.sample的内容是:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <ISBNdb server_time="2010-08-11T04:13:08Z">
      <BookList total_results="1" page_size="10" page_number="1" shown_results="1">
      <BookData book_id="mastering_perl" isbn="0596527241" isbn13="9780596527242">
      <Title>Mastering Perl</Title>
      <TitleLong></TitleLong>
      <AuthorsText>brian d foylt;/AuthorsText>
      <PublisherText publisher_id="oreilly_media">Sebastopol, CA : O'Reilly Media, c2007.</PublisherText>
      </BookData>
      </BookList>
      </ISBNdb>
      

答案 1 :(得分:5)

最好的办法是在将XML发送到CouchDB之前将XML转换为JSON。当然,您也可以不转换它并将其存储在JSON字段中。您的文档可能如下所示:

{
  "_id": "...",
  "_rev": "...",
  "xml": "<doc><name1>value1</name1><name2>value2</name2></doc>",
  ...some other fields...
}

您还可以将XML存储为附件:http://wiki.apache.org/couchdb/HTTP_Document_API#Attachments这样您可以调用/dbName/documentID/storedData.xml或其他任何内容,并使用正确的XML Content-type获取文件。

这实际上取决于您是想要恢复XML,还是想在转换后只使用JSON。