【问题标题】:simplest way to generate xml in python在python中生成xml的最简单方法
【发布时间】:2014-04-07 19:10:59
【问题描述】:

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

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写入文件

【问题讨论】:

  • xml 标签是固定的吗?看起来更像一个 html。
  • 查看这个答案:http://stackoverflow.com/a/4470210/25097lxml.builder.E 超级好用。
  • @unixer: 是的,他们是固定的
  • 作为一个不知道如何使用 python 的 xml 库的人来说,如果你有理由确定你的范围不会因为这个功能而增长,你的问题似乎很容易用两个嵌套的 for 循环来实现.

标签: python xml


【解决方案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 一样在同一行中正确缩进格式??
  • @Fraz 这只是一个美化汤,你可以自定义输出。
【解决方案2】:

你也可以定义一个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>

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多