Tôi đang cố gắng để có được một đại diện nhỏ gọn về các không gian tên trong ElementTree hoặc lxml khi các phần tử phụ nằm trong một không gian tên khác với tên cha mẹ. Dưới đây là ví dụ cơ bản:Các Elementtree hoặc lxml nhỏ gọn hơn
from lxml import etree
country = etree.Element("country")
name = etree.SubElement(country, "{urn:test}name")
name.text = "Canada"
population = etree.SubElement(country, "{urn:test}population")
population.text = "34M"
etree.register_namespace('tst', 'urn:test')
print(etree.tostring(country, pretty_print=True))
Tôi cũng đã cố gắng tiếp cận này:
ns = {"test" : "urn:test"}
country = etree.Element("country", nsmap=ns)
name = etree.SubElement(country, "{test}name")
name.text = "Canada"
population = etree.SubElement(country, "{test}population")
population.text = "34M"
print(etree.tostring(country, pretty_print=True))
Trong cả hai trường hợp, tôi nhận được một cái gì đó như thế này ra:
<country>
<ns0:name xmlns:ns0="urn:test">Canada</ns0:name>
<ns1:population xmlns:ns1="urn:test">34M</ns1:population>
</country>
Trong khi đó là chính xác, tôi muốn nó ít tiết hơn - điều này có thể trở thành vấn đề thực sự với các tập dữ liệu lớn (và đặc biệt là vì tôi đang sử dụng NS lớn hơn nhiều so với 'urn: test').
Nếu tôi OK với 'nước' là bên trong "urn: test" không gian tên và tuyên bố nó như vậy (trong ví dụ đầu tiên ở trên):
country = etree.Element("{test}country")
sau đó tôi nhận được kết quả như sau:
<ns0:country xmlns:ns0="urn:test">
<ns0:name>Canada</ns0:name>
<ns0:population>34M</ns0:population>
</ns0:country>
Nhưng những gì tôi thực sự muốn điều này là:
<country xmlns:ns0="urn:test">
<ns0:name>Canada</ns0:name>
<ns0:population>34M</ns0:population>
<country>
Bất kỳ ý tưởng?
Cảm ơn! Điều này làm việc cho tôi. –