在Python中编写易读的XML

1 投票
5 回答
3264 浏览
提问于 2025-04-15 21:54

有没有其他方法可以用Python写出容易阅读的XML,而不是自己创建一个方法?用xMLFile.write(xmlDom.toxml())确实能生成正确的XML,但读起来挺困难的。我试过用prettyxml,但感觉效果不大。例如,下面这个我认为是人类可读的XML:

<myroot>
    <ent1
        att1="val1"
        att2="val2"
        att3="val3"
    />
    <ent2>
        <ent3
            att1="val1"
            att2="val2"
        />
    </ent2>
</myroot>

下面的回复总结了一些解决方案:
1) 如果你只是偶尔需要查看XML来调试,那就不用在写的时候格式化XML,可以用xmllint或者XML编辑器来读取。或者
2) 使用像Beautiful Soup这样的库。或者
3) 自己写一个方法。

5 个回答

1

我觉得用Python自带的功能来实现这个,最好的方法就是这个回答里提到的:https://stackoverflow.com/a/1206856

import xml.dom.minidom

xml = xml.dom.minidom.parse(xml_fname) # or xml.dom.minidom.parseString(xml_string)
pretty_xml_as_string = xml.toprettyxml()
1

如果你在使用elementalTree,这段代码就可以正常运行。

XMLtext= ET.tostringlist(root)
OutputStr=''
level=-1

for t in XMLtext:

    if t[0]=='<':
            level=level+1
    if t[0:2]=='</':
            #remove the added level because of '<'
        level=level-1

    if t[-1]=='"' or t[0]=='<' or t[-2:]=='/>':
        t="\n"+"    "*level+t 

    if t[-2:]=='/>' or t[level*4+1:level*4+3]=='</': #end of block 
        level=level-1

    if t[-1:]=='>':    
        t=t+'\n'


    OutputStr=OutputStr+t

f = open("test.xml", "w")
f.write(OutputStr)
f.close()
6
print lxml.etree.tostring(root_node, pretty_print=True)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答