2010-10-09 28 views
21

Tôi đang tạo tài liệu SVG với ElementTree trong Python 2.7. Đây là mã:Tạo tài liệu SVG/XML không có vùng tên ns0 bằng Python ElementTree

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') 

này tạo ra kết quả:

<?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> 

này không phân tích SVG là hợp lệ. Làm cách nào để xoá không gian tên ns0?

Trả lời

45

tôi chỉ figured it out và tôi không thể xóa các câu hỏi như vậy ở đây nó là:

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

Tôi nghĩ rằng đây chỉ hoạt động như của Python 2.7 mặc dù.

+13

Trả lời câu hỏi của riêng bạn là tốt hơn nhiều so với xóa nó. Nếu ai đó sau này có câu hỏi này, câu hỏi đó sẽ được trả lời và lập chỉ mục! – codekaizen

+0

Nếu bạn cần khả năng tương thích với Pythons cũ hơn (hoặc thậm chí nếu bạn không), bạn có thể nên sử dụng ['lxml.etree'] (http://codespeak.net/lxml/tutorial.html): đây là hoặc ít hơn một superset của những gì được cung cấp bởi 'xml.etree'. Tuy nhiên, có một số phụ thuộc bên ngoài. – intuited

+0

lxml nổi tiếng vì không hoạt động trên OS X ngoài hộp. Họ không cung cấp một quả trứng biên dịch sẵn cho các máy Mac của Intel và cố gắng biên dịch nó từ đầu là cực kỳ khó. Cách duy nhất để làm cho nó hoạt động nhanh chóng là nếu bạn đang sử dụng macports, điều mà tôi không cảm thấy là sự phụ thuộc chấp nhận được. – jfenwick

0

Đây là cách tôi làm điều đó với lxml.

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

đã qua sử dụng mẫu mã từ đây: lxml-removing-xml-tags-when-parsing

Các vấn đề liên quan