2010-08-09 15 views
9

मैं यह करना चाहता हूं: 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 सर्वर साइड पर
  1. , मैं json वस्तु में xml स्ट्रिंग पार्स।
  2. जेसन ऑब्जेक्ट को दस्तावेज़ के रूप में सहेजें।

क्या यह संभव है? मुझे कैसे करना चाहिए?

धन्यवाद!

उत्तर

5

आपकी सबसे अच्छी शर्त एक्सचेंज को JSON में CouchDB पर भेजने से पहले इसे घुमाने के लिए जा रही है। बेशक, आप इसे भी परिवर्तित नहीं कर सकते हैं और बस इसे JSON फ़ील्ड में संग्रहीत कर सकते हैं। आपका दस्तावेज़ कुछ इस तरह दिख सकता है:

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

तुम भी एक अनुलग्नक के रूप एक्सएमएल संग्रहीत कर सकती है: http://wiki.apache.org/couchdb/HTTP_Document_API#Attachments इस तरह आप /dbName/documentID/storedData.xml के लिए एक कॉल या जो कुछ भी कर सकते हैं, और फ़ाइल उचित XML सामग्री-प्रकार के साथ वापस मिल ।

यह वास्तव में इस बात पर निर्भर करता है कि आप एक्सएमएल वापस प्राप्त करना चाहते हैं, या आप रूपांतरण के बाद जेएसओएन के साथ काम करना चाहते हैं या नहीं।

+0

मैं जेसन प्राप्त करना चाहता हूं। इसलिए लगाव उपयुक्त नहीं है, शायद सबसे अच्छा तरीका जेसन के एक सर्वर का उपयोग सर्वर पर एक्सएमएल स्थानांतरित करने के लिए किया जाता है, लेकिन यह असुविधाजनक है जब मेरे एक्सएमएल में इतने सारे '' चरित्र शामिल हैं। उन्हें मैन्युअल रूप से बच जाना चाहिए। – turtledove

+1

आपको भागने की आवश्यकता नहीं है उन्हें मैन्युअल रूप से बदलें। बस अपने एक्सएमएल को एक स्ट्रिंग में बदलें, जो पहले से ही ऐसा लगता है, और फिर json_encode() चलाएं। यह आपके लिए सभी भागने और स्वरूपण का ख्याल रखेगा। साथ ही, आप हमेशा एक्सएमएल को PHP में अनुवाद कर सकते हैं ऑब्जेक्ट्स (काफी सरल ऑपरेशन), और फिर इसे json_encode() के माध्यम से चलाएं और अपने दस्तावेज़ में स्टोर करें। –

6

मैं एक और तरीका यह करने के लिए मिल गया है, यहाँ नमूना है:

  1. बनाने db

    कर्ल -X डाल http://localhost:5984/bookstore

  2. बनाने डिजाइन दस्तावेज़

    कर्ल -X पोस्ट 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\"]; 
       }" 
     } 
    } 
    ] 
} 
  1. परीक्षण _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> 
संबंधित मुद्दे