Как положить XML в couchDB? - PullRequest
       6

Как положить XML в couchDB?

11 голосов
/ 09 августа 2010

я хочу сделать это: 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 как документ.

это возможно? как мне это сделать?

спасибо!

Ответы [ 2 ]

6 голосов
/ 11 августа 2010

Я нашел другой способ сделать это, вот пример:

  1. создать дБ

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

  2. создание проектного документа

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

где содержимое 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"

где содержимое 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>
5 голосов
/ 09 августа 2010

Лучше всего будет конвертировать XML в JSON, прежде чем отправлять его в CouchDB.Конечно, вы также не можете конвертировать его и просто сохранить в поле 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-типом содержимого.

Это действительно зависит от того, хотите ли вы вернуть XML или хотите работать только с JSON после преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...