如何用Python输出漂亮的xml文件

如题所述

你的问题可以直接转化为python如何读取文件,使用这句代码:open('thefile.xml').read( ) 下面是例子: >>> open('D:\\Test.xml',encoding='utf8').read()不知道为什么,python3.4中读取文件的默认使用GBK,这一点要注意
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-07-24
最近要用Python处理一个xml文件。平时习惯了用xml.etree.ElementTree,结果发现此库存在一些让人无法忍受的缺点:
1. 无法处理comment和cdata
2. 输出后的xml文件没有换行,没有缩进,十分难以阅读

于是尝试这用xml.dom.minidom,前两个问题几乎全部解决了。唯一让人看着不爽的是minidom对于text的处理。比如,我期待的xml输入如下:

[html] view plain copy
<pre name="code" class="html"><pre name="code" class="html"><root>
<host>192.168.0.1</host>
</root>

但是使用xml.dom.minidom.Document.writexml后,输出的结果却是这样的:

[html] view plain copy
<root>
<host>
192.168.0.1
</host>
</root>

开始的时候,我考虑重写Document.writexml函数,觉得太麻烦,有用牛刀杀鸡之感。后来想想,其实自己的需求非常简单,只是需要对Document的输出结果做个二次处理即可。使用python的正则表达式库就可以实现:

[python] view plain copy
def save_xml(self, file_name):
xml_str = self.m_dom.toprettyxml(indent=" ")
repl = lambda x: ">%s</" % x.group(1).strip() if len(x.group(1).strip()) != 0 else x.group(0)
pretty_str = re.sub(r'>\n\s*([^<]+)</', repl, xml_str)
open(file_name, 'w').write(pretty_str)

先将Document输出到字符串,然后使用正则表达式将text中的空行去掉即可。
黑马程序员的PYthon是国内最早开设的真正人工智能课程。课程全面系统,紧跟时代潮流。本回答被提问者采纳
第2个回答  2017-07-24
你的问题可以直接转化为python如何读取文件,使用这句代码:open('thefile.xml').read( ) 下面是例子: >>> open('D:\\Test.xml',encoding='utf8').read()不知道为什么,python3.4中读取文件的默认使用GBK,这一点要注意
第3个回答  2017-11-19

最近要用python处理一个xml文件。平时习惯了用xml.etree.ElementTree,结果发现此库存在一些让人无法忍受的缺点:

1. 无法处理comment和cdata

2. 输出后的xml文件没有换行,没有缩进,十分难以阅读

于是尝试这用xml.dom.minidom,前两个问题几乎全部解决了。唯一让人看着不爽的是minidom对于text的处理。比如,我期待的xml输入如下:

[html] view plain copy

    <pre name="code" class="html"><pre name="code" class="html"><root>  

    <host>192.168.0.1</host>  

    </root>  




    但是使用xml.dom.minidom.Document.writexml后,输出的结果却是这样的:

    [html] view plain copy

    <root>  

    <host>  

    192.168.0.1  

    </host>  

    </root>  

    开始的时候,我考虑重写Document.writexml函数,觉得太麻烦,有用牛刀杀鸡之感。后来想想,其实自己的需求非常简单,只是需要对Document的输出结果做个二次处理即可。使用python的正则表达式库就可以实现:

    [python] view plain copy

    def save_xml(self, file_name):  

    xml_str = self.m_dom.toprettyxml(indent="    ")  

    repl = lambda x: ">%s</" % x.group(1).strip() if len(x.group(1).strip()) != 0 else x.group(0)  

    pretty_str = re.sub(r'>\n\s*([^<]+)</', repl, xml_str)  

    open(file_name, 'w').write(pretty_str)  


    先将Document输出到字符串,然后使用正则表达式将text中的空行去掉即可。
相似回答