Đối với một cấu trúc XML đơn giản như vậy, bạn có thể không muốn liên quan đến một mô-đun XML thổi đầy đủ. Hãy xem xét một chuỗi mẫu cho các cấu trúc đơn giản nhất, hoặc Jinja cho một cái gì đó phức tạp hơn một chút. Jinja có thể xử lý vòng lặp qua danh sách dữ liệu để tạo ra xml bên trong của danh sách tài liệu của bạn. Đó là một chút phức tạp hơn với các mẫu chuỗi python thô
Ví dụ về Jinja, xem answer to a similar question của tôi.
Dưới đây là ví dụ về việc tạo xml của bạn với các mẫu chuỗi.
import string
from xml.sax.saxutils import escape
inner_template = string.Template(' <field${id} name="${name}">${value}</field${id}>')
outer_template = string.Template("""<root>
<doc>
${document_list}
</doc>
</root>
""")
data = [
(1, 'foo', 'The value for the foo document'),
(2, 'bar', 'The <value> for the <bar> document'),
]
inner_contents = [inner_template.substitute(id=id, name=name, value=escape(value)) for (id, name, value) in data]
result = outer_template.substitute(document_list='\n'.join(inner_contents))
print result
Output:
<root>
<doc>
<field1 name="foo">The value for the foo document</field1>
<field2 name="bar">The <value> for the <bar> document</field2>
</doc>
</root>
Các Downer của mẫu tiếp cận là bạn sẽ không nhận được thoát của <
và >
miễn phí. Tôi đã nhảy múa xung quanh vấn đề đó bằng cách kéo trong một util từ xml.sax
Nguồn
2017-11-02 00:12:46
Tôi nhận được 'import xml.etree.cElementTree như ET',' ImportError: Không có module nào có tên là etree.cElementTree' - python OSX 10.8 chuẩn, nhưng bằng cách nào đó nó hoạt động khi tôi chạy nó từ bên trong ipython. – guaka
@Kasper: Tôi không có máy Mac nên tôi không thể cố gắng sao chép vấn đề. Cho tôi biết phiên bản Python và tôi sẽ xem liệu tôi có thể sao chép nó trên Linux không. – ssokolow
@ssokolow, tôi đang ở trên OSX 10.9 bây giờ và điều này đã được giải quyết bằng cách nào đó, tôi không nhớ đó có phải là hành động của riêng tôi hay tôi đã làm gì đó để giải quyết nó. – guaka