![](/img/trans.png)
[英]How do I get Python's ElementTree to pretty print to an XML file?
[英]XML ElementTree with pretty print
1.)如果您查看以下标签和我的xml-output的空格,您会注意到空格不正确,这是2)中代码的原因。
<SD-ID-Gesamt>
& </SD-ID-Gesamt>
<Lage>
和</Lage>
<Parameter>
& </Parameter>
电流输出:
<SD-ID-Gesart>
<SD-ID-Code>
<SD-ID>DD-RE-1.0G-10</SD-ID>
<Lage>
<XP>14.84</XP>
<YP>73.19</YP>
<ZP>7.92</ZP>
<WKS>95.32</WKS>
</Lage>
<Parameter>
<Form>Rectangle</Form>
<Art>Deckendurchbruch/Art>
<Gewerk>-HT-SAN-DURCHBRUCH</Gewerk>
<Ebene>1.OG OKFF +4,50 m</Ebene>
<Breite>1,800000</Breite>
<Höhe>0,500000</Höhe>
<Tiefe>0,450000</Tiefe>
<Status_Neu>0</Status_Neu>
<Status_Geändert>1</Status_Geändert>
</Parameter>
<SD-ID-Code>
2.)我正在调用indent()
来漂亮地打印我的xml文件。 除了您在下面看到的代码中的一个小错误之外,它几乎可以按预期运行。 您可以在上图中的xml-output中看到该错误。
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
3.)使用下面的代码,当它通过indent()
时,我将创建ElementTree。
indent(sd)
tree = ET.ElementTree(sd)
tree.write(open(pfad + '\\'+ datei_name + '.xml', "w"), encoding='utf-8',
xml_declaration=True, method='xml')
我需要编辑indent()
缩进函数的定义以获取正确的空格。 在那种情况下,我真的不知道当标签相等时如何退回空格。 如果您能帮助我解决该问题,我将非常高兴。
我无法从您的示例中复制错误的缩进,但是根据http://effbot.org/zone/element-lib.htm#prettyprint ,您的函数被错误地复制了。 对于这些行:
if not elem.text or not elem.text.strip():
elem.text = i + ""
引号之间应有两个空格:
if not elem.text or not elem.text.strip():
elem.text = i + " "
我运行了这段代码,它显示正确。
from xml.etree import ElementTree as et
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
data = '''<one><two><three>3</three><four>4</four></two></one>'''
tree = et.fromstring(data)
indent(tree)
et.dump(tree)
输出:
<one>
<two>
<three>3</three>
<four>4</four>
</two>
</one>
未来注意事项:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.