首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python动态创建xml文件

Python动态创建xml文件
EN

Stack Overflow用户
提问于 2018-06-15 18:26:53
回答 1查看 3.4K关注 0票数 0

我在用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>

怎么了?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-17 02:56:38

每次找到'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树中最低的节点),然后使用不同的变量来创建root的SubElements。此外,根据您的原始代码和所需的输出,我假设只输出带有标题的项,因此您的代码需要反映这一点(具体地说,在您的代码中,只有在行中有'EXTINF‘的情况下才创建item元素,并且您的示例输出中没有一个缺少标题)。

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\'

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50873711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档