Tôi tìm thấy một cách mới để tránh các thư viện mới và reparsing xml. Bạn chỉ cần phải vượt qua phần tử gốc của bạn để chức năng này (xem dưới đây giải thích):
def indent(elem, level=0):
i = "\n" + level*" "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
Có một thuộc tính có tên là "tail" trên trường xml.etree.ElementTree.Element. Thuộc tính này có thể thiết lập một chuỗi sau khi một nút:
"<a>text</a>tail"
Tôi tìm thấy một liên kết từ năm 2004 nói về một Element Library Functions sử dụng này "đuôi" để thụt một phần tử.
Ví dụ:
root = ET.fromstring("<fruits><fruit>banana</fruit><fruit>apple</fruit></fruits>""")
tree = ET.ElementTree(root)
indent(root)
# writing xml
tree.write("example.xml", encoding="utf-8", xml_declaration=True)
Kết quả trên "example.xml":
<?xml version='1.0' encoding='utf-8'?>
<fruits>
<fruit>banana</fruit>
<fruit>apple</fruit>
</fruits>
Nguồn
2015-11-27 11:37:46
Cảm ơn Steven. Đây là những gì tôi đã làm. –