2010-06-08 12 views
5

सरलजसन के लिए एक समान पुस्तकालय है, जो एक्सएमएल से डेटा के त्वरित क्रमिकरण को सक्षम करेगा।एक्सएमएल लाइब्रेरी सरलजसन/जेसन के समान है? - पायथन

e.g. json.loads('{vol:'III', title:'Magical Unicorn'}') 

e.g. json.dumps([1,2,3,4,5]) 

कोई भी विचार?

उत्तर

2

मुझे एक के बारे में पता नहीं है। जब तक xmlrpc गणना नहीं करता है ... यदि आप अपना खुद का रोलिंग करने के बारे में सोच रहे हैं: ElementTree के साथ कुछ भी करना अन्य एक्सएमएल पुस्तकालयों की तुलना में एक खुशी है।

लेकिन, चूंकि आप शायद एक ऐसे प्रतिनिधित्व के साथ समाप्त हो जाएंगे जो गैर-स्टैंडराइज्ड होगा, तो आपको दोनों तरफ से नियंत्रित करने की आवश्यकता होगी, है ना? तो क्यों न केवल json, pickle या कुछ ऐसा पहले से ही क्यों चुनें?

xmlrpclib.dumps(data) 

वन xmlrpclib में सीमाओं का उल्लेख है, जो एक अच्छा स्थान है:

मामले में आप xmlrpclib मॉड्यूल का उपयोग करना चाहते हैं। कुछ जो मैंने खुद को देखा है: इंटीग्रर्स 2^31-1 से अधिक नहीं हो सकते हैं या लाइब्रेरी शिकायत करेगी। "कोई नहीं" मान आम तौर पर ठीक नहीं है, लेकिन आप इसके आसपास हो सकते हैं। शायद अन्य सीमाएं भी हैं।

इसके अलावा, xmlrpc-प्रोटोकॉल सुंदर वर्बोज़ है। अगर आपको चिंता करने की ज़रूरत है कि कितना डेटा भेजा जाता है, तो यह सबसे अच्छा नहीं है। लेकिन कोई एक्सएमएल संस्करण बहुत कुशल नहीं होगा।

3

आपको जेएसएल के रूप में संगत के रूप में एक्सएमएल के लिए कुछ भी नहीं मिल रहा है, क्योंकि एक्सएमएल डेटा प्रकारों के बारे में नहीं जानता है। यह आपके लिए सम्मेलनों का पालन करने या किसी XML स्कीमा फ़ाइल के अनुपालन को लागू करने पर निर्भर करता है।

कहा जा रहा है, यदि आप XML-RPC डेटा संरचना मानचित्रण और कुछ सीमाओं को स्वीकार xmlrpclib पैकेज है कि अजगर मानक पुस्तकालय में रहता है की जाँच करने को तैयार हैं:

http://docs.python.org/library/xmlrpclib.html#convenience-functions

>>> import xmlrpclib 
>>> s = xmlrpclib.dumps(({'vol':'III', 'title':'Magical Unicorn'},)) 
>>> print s 
<params> 
<param> 
<value><struct> 
<member> 
<name>vol</name> 
<value><string>III</string></value> 
</member> 
<member> 
<name>title</name> 
<value><string>Magical Unicorn</string></value> 
</member> 
</struct></value> 
</param> 
</params> 

>>> xmlrpclib.loads(s)[0] 
({'vol': 'III', 'title': 'Magical Unicorn'},) 
>>> 
+0

विशेष रूप से, xmlrpc प्रारूप में जेसन की तुलना में कुछ सीमाएं हैं ... केवल dict कुंजी के लिए तार। कोई नहीं, बूलियन। (अगर मैं गलत हूं तो मुझे सही करें!) –

+0

सुधार: आप गलत हैं। :) डिक्शन कुंजी भी जेसन में तार होना चाहिए। बूलियन मान xmlrpclib द्वारा समर्थित हैं, जैसा कि आप 'allow_none = True' तर्क को डंप करने के लिए पास करते हैं, कोई नहीं है। –

2

यह एक्सएमएल के साथ सीधे आगे नहीं है, क्योंकि यह जेसन के साथ है क्योंकि एक्सएमएल और पायथन के डेटाटाइप के बीच कोई "टाइप मैपिंग" नहीं है। हेक्स एक्सएमएल डेटा कुछ भी हो सकता है, जैसा कि संबंधित एक्सएसएल के भीतर मैप किया गया है।

एपीआई का सवाल है, का संबंध है जो आप ज्यादातर परेशान हैं, के बारे में मेरा सुझाव है Element Tree

तत्व ट्री का उपयोग कर XML पार्सिंग पर एक अच्छा ट्यूटोरियल के लिए, मैं तुम्हें Mark Pilgrim's Dive into Python3

3

का उल्लेख आप देख सकते हैं कि वे किस तरह इसे Django में किया है: xml_serializer.py और इसे अपनी आवश्यकताओं के अनुरूप बनाएं।