2010-10-09 11 views
21

का उपयोग कर एनएस 0 नेमस्पेस के बिना एसवीजी/एक्सएमएल दस्तावेज़ बनाएं, मैं पाइथन 2.7 में एलिमेंट ट्री के साथ एक एसवीजी दस्तावेज़ बना रहा हूं। यहाँ कोड है:पायथन ElementTree

<?xml version='1.0' encoding='iso-8859-1'?> 
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg" height="100%" version="1.1" width="100%"><path d="M1 1 L2 2 Z" /></ns0:svg> 

इस रूप में मान्य एसवीजी पार्स नहीं करता है:

from xml.etree import ElementTree as etree 

root = etree.XML('<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>') 
root.append(etree.Element("path")) 
root[0].set("d", "M1 1 L2 2 Z") 
print etree.tostring(root, encoding='iso-8859-1') 

यह आउटपुट उत्पन्न करता है। मैं ns0 नेमस्पेस को कैसे हटा सकता हूं?

उत्तर

45

मैं सिर्फ यह सोचा बाहर है और मैं तो यहाँ यह है सवाल नहीं हटा सकते हैं:

etree.register_namespace("","http://www.w3.org/2000/svg") 

मैं अजगर 2.7 यद्यपि के रूप में लगता है कि यह केवल काम करता है।

+13

अपने स्वयं के प्रश्न का उत्तर देना इसे हटाने की तुलना में बेहतर है। अगर किसी के पास बाद में यह प्रश्न है, तो इसका उत्तर पहले से ही दिया जाएगा और अनुक्रमित किया जाएगा! – codekaizen

+0

यदि आपको पुरानी पायथन (या यदि आप नहीं करते हैं) के साथ संगतता की आवश्यकता है, तो आप ['lxml.etree'] (http://codespeak.net/lxml/tutorial.html) का उपयोग करके बेहतर हो सकते हैं: यह और भी है या 'xml.etree' द्वारा प्रदान की गई चीज़ों के सुपरसैट को कम करें। हालांकि, कुछ बाहरी निर्भरता है। – intuited

+0

एलएक्सएमएल बॉक्स के बाहर ओएस एक्स पर काम नहीं करने के लिए कुख्यात है। वे इंटेल मैक के लिए प्रीकंपिल्ड अंडे नहीं प्रदान करते हैं और इसे स्क्रैच से संकलित करने की कोशिश करना बेहद मुश्किल है। इसे जल्दी से काम करने का एकमात्र तरीका यह है कि यदि आप मैकपोर्ट्स का उपयोग कर रहे हैं, जो मुझे नहीं लगता कि एक स्वीकार्य निर्भरता है। – jfenwick

0

यहां मैं एलएक्सएमएल के साथ ऐसा कैसे करता हूं। यहाँ से

from lxml import etree 
svg_tree = etree.fromstring(svg_str, parser=etree.XMLParser()) 
etree.tostring(svg_tree) 

प्रयुक्त नमूना कोड: lxml-removing-xml-tags-when-parsing

संबंधित मुद्दे