2009-09-03 14 views
9

में किसी विशेषता पर एक नाम स्थान जोड़ने के लिए:मैं एक xml प्रविष्टि है कि इस अजगर और lxml का उपयोग कर की तरह लग रहा बनाने के लिए कोशिश कर रहा हूँ कैसे lxml

<resource href="Unit 4.html" adlcp:scormtype="sco"> 

मैं अजगर और lxml उपयोग कर रहा हूँ। मुझे adlcp:scormtype विशेषता के साथ परेशानी हो रही है। मैं एक्सएमएल के लिए नया हूं इसलिए अगर मैं गलत हूं तो कृपया मुझे सही करें। adlcp एक नामस्थान है और scormtype एक विशेषता है जिसे adlcp नेमस्पेस में परिभाषित किया गया है, है ना?
मुझे यह भी यकीन नहीं है कि यह सही सवाल है लेकिन ... मेरा सवाल यह है कि, मैं lxml का उपयोग कर गैर-डिफ़ॉल्ट नेमस्पेस से तत्व में एक विशेषता कैसे जोड़ूं? अगर यह एक मामूली सवाल है तो मैं पहले से माफी मांगता हूं।

उत्तर

15

यह एक पूर्ण उत्तर नहीं है, लेकिन केवल कुछ पॉइंटर्स हैं।

adlcp नामस्थान नहीं है यह नामस्थान उपसर्ग है। नामस्थान को xmlns:adlcp="http://xxx/yy/zzz"

में एक विशेषता द्वारा दस्तावेज़ में परिभाषित किया गया है lxml में आप हमेशा नाम/विशेषता नाम सहित तत्व/विशेषता नाम सेट करते हैं। {http://xxx/yy/zzz}scormtype बस स्कॉर्मटाइप के बजाय। एलएक्सएमएल स्वचालित रूप से एक नामस्थान उपसर्ग में डाल दिया जाएगा। हालांकि एलएक्सएमएल उपसर्ग को ns0 या इसी तरह सेट करेगा जब तक कि आप अधिक झुकाव न करें लेकिन यह पर्याप्त होना चाहिए क्योंकि उपसर्ग का कोई मतलब नहीं है। (हालांकि कुछ लोग उपसर्ग नाम को नियंत्रित करना पसंद करते हैं; एलिमेंट और सबलेमेंट फ़ंक्शन पर nsmap तर्क देखें, और register_namespace फ़ंक्शन)।

मैं lxml tutorial on namespace पर विचार करेंगे और यह भी Dive into Python - XML chapter

+0

अजगर लिंक में डुबकी मृत (410 विगत) –

+0

@JonasWielicki है - नई कड़ी के साथ अद्यतन – Mark

4

आज़माएं:

builder = ElementMaker(namespace="http://a.different.url/blah/v.10", 
         nsmap={ 
         'adlcp': "http://a.namespace.url/blah/v.10", 
         'anotherns': "http://a.different.url/blah/v.10" 
         }) 

builder.resource() 
builder.attrib['href'] = "Unit 4.html" 
builder.attrib['{http://a.namespace.url/blah/v.10}scormtype'] = 'sco' 

print(etree.tostring(builder, pretty_print=True)) 
संबंधित मुद्दे