繁体   English   中英

Python 创建 XML 文件

[英]Python create XML file

如何创建这样的 XML 文件?

<?xml version="1.0" encoding="utf-8"?>

<data>

     <li class= 'playlistItem' data-type='local' data-mp3='PATH' >
        <a class='playlistNonSelected' href='#'>NAME</a>
     </li>

     ...

</data>

我会动态创建它,对于我拥有的每个项目,我会用我需要的值填充PATHNAME变量。

我正在尝试使用lxml 到目前为止,这是我想出的,但我认为这是不正确的:

from lxml import etree

for item in my_list:
    root = etree.Element('li', class = 'playlistItem', data-type = 'local', data-mp3 = PATH)
    child = etree.Element('a', class = 'playlistNonSelected', href ='#')
    child.text = NAME

即使上述内容是正确的,此时我也迷失了,因为如果列表中有 20 个项目,我该如何为每个项目执行此操作,然后将其全部写入 XML 文件? 我试过查看其他答案,但大多数回复都是像这样生成 XML:

<root>
  <child/>
  <child>some text</child>
</root>

而且我不知道如何生成我需要的那种。 对不起,如果我犯了明显的错误。 我很感激任何帮助。 谢谢!

除了一些小的语法和使用问题外,您走在正确的轨道上:

  1. class是一个 Python 关键字,您不能将其用作函数参数名称(这实际上是class = 'playlistItem'所做的
  2. data-type在 Python 中不是有效的变量名,它将被评估为data MINUS type ,考虑使用类似dataTypedata_type东西。 可能有办法解决这个问题,但是恕我直言,这会使代码不必要地复杂化而不添加任何值(请参阅编辑 #1 了解如何执行此操作

话虽如此,下面的代码片段应该给你一些可用的东西,你可以从那里继续。 如果您需要任何其他帮助,请随时告诉我:

from lxml import etree

data_el = etree.Element('data')

# You can do this in a loop and keep adding new elements
# Note: A deepcopy will be required for subsequent items
li_el = etree.SubElement(data_el, "li", class_name = 'playlistItem', data_type = "local", data_mp3 = "PATH")
a_el = etree.SubElement(li_el, "a", class_name = 'playlistNotSelected', href='#')

print etree.tostring(data_el, encoding='utf-8', xml_declaration = True, pretty_print = True)

这将生成以下输出(您可以将其写入文件):

<?xml version='1.0' encoding='utf-8'?>
<data>
  <li class_name="playlistItem" data_mp3="PATH" data_type="local">
    <a class_name="playlistNotSelected" href="#"/>
  </li>
</data>

编辑#0:

或者,您也可以通过先将文件转换为ElementTree来写入文件,例如

# Replace sys.stdout with a file object pointing to your object file:
etree.ElementTree(data_el).write(sys.stdout, encoding='utf-8', xml_declaration = True, pretty_print = True)

编辑#1:

由于元素属性是字典,因此您可以使用set来指定任意属性而不受任何限制,例如

li_el.set('class', 'playlistItem')
li_el.set('data-type', 'local')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM