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()
?
我在 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()
?