将带标签和缩进的XML文件读入Python变量

0 投票
1 回答
8110 浏览
提问于 2025-04-18 17:14

有没有办法把整个XML文件读到一个Python变量里,并且保留标签和缩进呢?

data = """<?xml version="1.0" encoding="UTF-8" ?>
<uimap>
    <page name="login">
        <uielement name="username">
             <locator>//input[@type='text']</locator>
        </uielement>
        <uielement name="password">
            <locator>//input[@type='password']</locator>
        </uielement>
    </page>
</uimap>
""" 

这个例子比较简单,所以我可以手动输入。但是如果我的XML文件很大,我该怎么把它们读入Python变量呢?用fopen不行,因为它会把所有的字体大小和样式也读进来,这在我的情况下是多余的。

1 个回答

2
import xml.dom.minidom

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

这个回答来自这里: 在Python中美化打印XML

这个方法会添加额外的换行。如果你想让输出看起来和你的数据完全一样,可以试试这个:

import xml.etree.ElementTree as ET

xmlObject = ET.parse(xml_fname) # or ET.fromstring(xml_string)
pretty_xml_as_string = ET.tostring(xmlObject).decode()
print(pretty_xml_as_string)

请注意,这个是针对Python3的。

[OP编辑:] 这是我用过的有效方法

import lxml.etree as etree 
x = etree.parse("filename") 
print etree.tostring(x, pretty_print = True)

撰写回答