我正在使用以下代码创建XML文件,但格式混乱了。我想知道是否有人有关于如何使用elementtree或lxml为以下代码创建格式化的xml文件的输入..
data = [['SEC.12.0', '\\\\DATA\\LOC', '\\\\ftp\\location'], ['SEC.13.0', '\\\\DATA\\LOC2', '\\\\ftp\\location2']]
f = open('data.xml', 'w')
f.write('<combo>')
for line in data :
f.write('<pro>' + line[0] + '</pro>')
f.write ('\n')
f.write('<dataloc>' + line[1] + '</dataloc>')
f.write('\n')
f.write('<ftploc>' + line[2]+ '</ftploc>')
f.write('\n')
f.write(</combo>')
答案 0 :(得分:0)
我不确定解析和转储你的xml字符串只是为了美化。你可以像这样预先格式化你的xml字符串:
from lxml import etree
data = [['SEC.12.0', '\\\\DATA\\LOC', '\\\\ftp\\location'], ['SEC.13.0', '\\\\DATA\\LOC2', '\\\\ftp\\location2']]
COMBO = """<combo>
{0}
</combo>"""
ITEM = """
<pro>{0}</pro>
<dataloc>{1}</dataloc>
<ftploc>{2}</ftploc>
"""
output = COMBO.format("".join([ITEM.format(*line) for line in data]))
with open('data.xml', 'w') as f:
f.write(output)
仅供参考,以下是lxml
的方法(我已经改变了xml过程):
from lxml import etree
data = [['SEC.12.0', '\\\\DATA\\LOC', '\\\\ftp\\location'], ['SEC.13.0', '\\\\DATA\\LOC2', '\\\\ftp\\location2']]
xml_string = '<combo>'
for line in data:
xml_string += "<pro>{0}</pro>\n<dataloc>{1}</dataloc>\n<ftploc>{2}</ftploc>\n".format(*line)
xml_string += '</combo>'
parser = etree.XMLParser(remove_blank_text=True)
root = etree.fromstring(xml_string, parser)
with open('data.xml', 'w') as f:
f.write(etree.tostring(root, pretty_print=True))
希望有所帮助。
答案 1 :(得分:0)
以下是如何使用lxml的Element
和SubElement
函数创建XML文档(无需键入任何尖括号):
from lxml import etree
data = [['SEC.12.0', '\\\\DATA\\LOC', '\\\\ftp\\location'],
['SEC.13.0', '\\\\DATA\\LOC2', '\\\\ftp\\location2']]
combo = etree.Element("combo") # Root element of XML document
for line in data:
etree.SubElement(combo, 'pro').text = line[0]
etree.SubElement(combo, 'dataloc').text = line[1]
etree.SubElement(combo, 'ftploc').text = line[2]
etree.ElementTree(combo).write("data.xml", pretty_print=True)
程序输出一个名为data.xml的文档,其中包含以下内容:
<combo>
<pro>SEC.12.0</pro>
<dataloc>\\DATA\LOC</dataloc>
<ftploc>\\ftp\location</ftploc>
<pro>SEC.13.0</pro>
<dataloc>\\DATA\LOC2</dataloc>
<ftploc>\\ftp\location2</ftploc>
</combo>
可以修改上述代码以使用ElementTree:
from xml.etree import ElementTree as etree
。pretty_print
方法中的write()
参数。但输出不会很漂亮。要解决该问题,您可以使用http://effbot.org/zone/element-lib.htm#prettyprint中的indent()
功能。