使用ElementTree或lxm创建xml文件

2024-10-01 11:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我用下面的代码创建了一个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>')

Tags: 文件代码data格式lineftpxmlpro
2条回答

下面是如何使用lxml的ElementSubElement函数创建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)

程序输出一个名为数据.xml,内容如下:

^{2}$

可以修改以上代码以使用ElementTree:

  1. 将import语句更改为from xml.etree import ElementTree as etree。在
  2. 删除write()方法中的pretty_print参数。在

但输出结果不会很好地打印出来。要解决这个问题,可以使用http://effbot.org/zone/element-lib.htm#prettyprint中的indent()函数。在

我不确定仅仅为了美化而解析和转储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的形成过程做了一些更改):

^{2}$

希望有帮助。在

相关问题 更多 >