Python xml 创建多个 <br /> 的子元素

1 投票
1 回答
731 浏览
提问于 2025-04-18 06:24

我正在用Python构建一些XML。我的数据来源是一个字符串,我需要把字符串中的 \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

我猜你是在使用 xml.etree.ElementTree 这个库。下面是大致的思路:

  • 用字符串的 replace() 方法把 \r 替换成 <br/>
  • 把替换后的内容放到 <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>

撰写回答