我想这样做: 1.将一个xml字符串传递给couchdb服务器。类似:如何将xml放入couchDB?
curl -X PUT http://localhost:5984/db/_design/app/_update/echo/h1
-d "<doc><name1>value1</name1><name2>value2</name2></doc>"
- 在CouchDB的服务器端,我解析的XML字符串成JSON对象。
- 将json对象保存为文档。
这是可能的吗?我该怎么办?
谢谢!
我想这样做: 1.将一个xml字符串传递给couchdb服务器。类似:如何将xml放入couchDB?
curl -X PUT http://localhost:5984/db/_design/app/_update/echo/h1
-d "<doc><name1>value1</name1><name2>value2</name2></doc>"
这是可能的吗?我该怎么办?
谢谢!
最好的办法是将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。
我找到了另一种方式来做到这一点,这里是样本:
创建数据库
卷曲-X PUT http://localhost:5984/bookstore
设计文档
卷曲-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 = {};
[email protected]();
if(doc._id==null||doc._id==\"\") {
[email protected]();
}
}
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\"];
}"
}
}
]
}
测试_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>
我想获得json。所以附件是不合适的,也许最好的方法是使用json的领域来将xml传输到服务器,但是当我的xml包含如此多的'''字符时很不方便,他们必须手动转义出来 – turtledove 2010-08-10 02:24:00
你应该不需要转义只需将你的XML转换成一个字符串,它看起来就像它一样,然后运行json_encode(),它将为你处理所有的转义和格式化,并且你总是可以把XML转换成PHP对象(相当简单的操作),然后通过json_encode()运行它并将其存储在文档中。 – 2010-08-10 17:22:29