[英]simplest way to generate xml in python
I have a defaultdict(list).. So, data structure of following format: 我有一个defaultdict(list)..因此,以下格式的数据结构:
1:[1,2,3,4,5]
2:[2,3,4]
I want to generate the following xml 我想生成以下xml
<html>
<page>
<src>1</src>
<links>
<link>1</link>
<link>2</link>
...
<link>5</link>
</links>
</page>
<page>
<src>2</src>
<links>
<link>2</link>
<link>3</link>
<link>4</link>
</links>
</page>
<html>
And then write an indented xml to file 然后将缩进的xml写入文件
You can use BeautifulSoup : 您可以使用BeautifulSoup :
from bs4 import Tag
d = {1: [1,2,3,4,5], 2: [2,3,4]}
root = Tag(name='html')
for key, values in d.iteritems():
page = Tag(name='page')
src = Tag(name='src')
src.string = str(key)
page.append(src)
links = Tag(name='links')
for value in values:
link = Tag(name='link')
link.string = str(value)
links.append(link)
page.append(links)
root.append(page)
print root.prettify()
prints: 打印:
<html>
<page>
<src>
1
</src>
<links>
<link>
1
</link>
<link>
2
</link>
<link>
3
</link>
<link>
4
</link>
<link>
5
</link>
</links>
</page>
<page>
<src>
2
</src>
<links>
<link>
2
</link>
<link>
3
</link>
<link>
4
</link>
</links>
</page>
</html>
You can also define a jinja2 template and render it: 您还可以定义jinja2模板并进行渲染:
from jinja2 import Template
data = {1:[1,2,3,4,5], 2:[2,3,4]}
html = """<html>
{% for key, values in data.iteritems() %}
<page>
<src>{{ key }}</src>
<links>
{% for value in values %}
<link>{{ value }}</link>
{% endfor %}
</links>
</page>
{% endfor %}
<html>"""
template = Template(html)
print template.render(data=data)
prints: 打印:
<html>
<page>
<src>1</src>
<links>
<link>1</link>
<link>2</link>
<link>3</link>
<link>4</link>
<link>5</link>
</links>
</page>
<page>
<src>2</src>
<links>
<link>2</link>
<link>3</link>
<link>4</link>
</links>
</page>
<html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.