Python 动态创建 xml 文件

Python create xml file dynamically

我在 python 中创建 xml 文件时遇到问题。我的脚本在开始时加载一个文本文件,读取每一行并检查内容是否包含特定字符串,这取决于它我想创建一个标签或在 xml 文件中。 为此,我正在使用 ElementTree 模块。

这是代码

for line in myfile.read().splitlines():
    if 'EXTINF' in line:
        root = etree.Element("item")
        etree.SubElement(root, "title").text = line
    elif 'http' in line:
        etree.SubElement(root, "link").text = 'http:\mysite.com\'
tree = etree.ElementTree(root)
tree.write('my\path\'+xml_file.xml)

xml 文件仅包含 for 循环迭代的最后一个元素。

我想要的输出是:

<item>
    <title> "my title" </title>
    <link> "http:\mysite.com" </link>
</item>

<item>
    <title> "my title" </title>
    <link> "http:\mysite.com" </link>
</item>

<item>
    <title> "my title" </title>
    <link> "http:\mysite.com" </link>
</item>

怎么了? 谢谢

每次找到 'EXTINF'.

时,您都在替换分配为 root 变量的元素
for line in myfile.read().splitlines():
    if 'EXTINF' in line:
        root = etree.Element("item") ## Creates a New Element called "item" with a variable name of "root"
        etree.SubElement(root, "title").text = line ## Creates a subelement called "title" to the current root variable
    elif 'http' in line:
        etree.SubElement(root, "link").text = 'http:\mysite.com\' ## Creates a subelement called "title" to the current root variable

tree = etree.ElementTree(root) ## Create an ElementTree Object using the current root variable
tree.write('my\path\'+xml_file.xml)

所以,显然,您需要确定 root 变量应该是什么(XML 树中的最低节点),然后使用不同的变量来创建 [=13= 的子元素].此外,根据您的原始代码和您想要的输出,我假设只输出带有标题的项目,因此您的代码需要反映 (具体来说,在您的代码中您只创建 item 元素,如果行中有 'EXTINF',并且示例输出中的 none 缺少标题)。

root = etree.Element("root")
for line in myfile.read().splitlines():
    if 'EXTINF' in line:  ## If it has a title, then create an item.
        subelement = etree.SubElement(root,"item")
        etree.SubElement(subelement, "title").text = line
        if 'http' in line: ## Check if it has a link
            etree.SubElement(subelement, "link").text = 'http:\mysite.com\'
tree = etree.ElementTree(root)

如果您可以接受没有标题的项目:

for line in myfile.read().splitlines():
    subelement = etree.SubElement(root,"item") ## Always Create an item for each line
    if 'EXTINF' in line:
        etree.SubElement(subelement, "title").text = line
    if 'http' in line:
        etree.SubElement(subelement, "link").text = 'http:\mysite.com\'

编辑: 此外,您是否考虑过使用 myfile.readlines() 而不是 myfile.read().splitlines()