在python中生成xml的最简单方法

时间:2014-04-07 19:10:59

标签: python xml

我有一个defaultdict(列表)..所以,以下格式的数据结构:

1:[1,2,3,4,5]
2:[2,3,4]

我想生成以下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>

然后将缩进的xml写入文件

2 个答案:

答案 0 :(得分:1)

您可以使用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()

打印:

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

答案 1 :(得分:0)

您还可以定义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)

打印:

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