Python xml创建具有多个子元素的子元素

时间:2014-05-13 13:34:26

标签: python xml

我正在使用Python构建一些XML。从源字符串中我需要用break(\r)替换<br />。该字符串可能有几个中断。

我正试图获得以下结果:

<foo><bar>Hello<br />world<br />I love you</bar></foo>

来自以下字符串:

'Hello\rworld\rI love you.'

我看过SubElement(<node>, 'br'),我已经开始使用CDATA了。

示例:

from xml.etree.cElementTree import Element, SubElement, tostring                               

def add_xml_data(value):
    data = Element('foo')
    val_node = SubElement(data, 'bar')
    val_node.text = value
    val = value.strip('\r')
    parts = val.split('\r')
    for part in parts:
        br = SubElement(val_node, 'br')
    return data

value = 'Hello\rworld\rI love you.'
print tostring(add_xml_data(value))

1 个答案:

答案 0 :(得分:0)

我假设你正在使用xml.etree.ElementTree。这是个主意:

  • 使用字符\r
  • <br/>替换为replace()
  • 使用字符串格式
  • 将其放在<bar></bar>标记内
  • 使用fromstring()
  • 加载字符串
  • 创建foo元素并将append()加载的树

代码:

import xml.etree.ElementTree as etree

data = """
Hello\rworld\rI love you.
"""
data = '<bar>%s</bar>' % data.replace('\r', '<br/>')

bar = etree.fromstring(data)
foo = etree.Element('foo')
foo.append(bar)

print etree.tostring(foo)

打印:

<foo><bar>
Hello<br />world<br />I love you.
</bar></foo>