在Python中生成XML文档时,lxml库的builder模块提供了一套非常直观的API。通过E工厂对象,我们可以用类似E.tagName(...)的调用来创建元素,这种方法常被称为E.method。它让XML结构在代码里看起来和实际的标签树几乎一致。

安装与导入
首先确保已安装lxml,随后在代码中从lxml.builder导入E:
# 安装命令:pip install lxml
from lxml import etree
from lxml.builder import E
# 创建一个根元素,带属性和子节点
root = E.root(
E.item(E.name('苹果'), E.price('5.0'), id='1'),
E.item(E.name('香蕉'), E.price('3.5'), id='2')
)
print(etree.tostring(root, pretty_print=True, encoding='utf-8').decode())
E.method的基本用法
E对象中的每一个点号后面的名称,都会变成一个XML标签名。调用时传入的位置参数会成为该标签的子节点或文本内容,而关键字参数则映射为标签属性。
构建带属性的元素
关键字参数直接转为属性,注意属性名若包含连字符可使用字典展开:
from lxml import etree
from lxml.builder import E
# 使用字典传递含特殊字符的属性名
attrs = {'data-id': '100', 'class': 'fruit'}
node = E.product('红富士', **attrs)
xml_str = etree.tostring(node, encoding='utf-8').decode()
print(xml_str)
嵌套结构与文本
子元素可以任意嵌套,文本字符串会被当作文本节点:
from lxml import etree
from lxml.builder import E
book = E.book(
E.title('Python入门'),
E.author('张三'),
E.chapter(
E.h1('第一章'),
E.p('这是段落内容')
)
)
print(etree.tostring(book, pretty_print=True, encoding='utf-8').decode())
与传统方式对比
如果使用基础的Element构造,代码会显得冗长:
from lxml import etree
root = etree.Element('root')
child = etree.SubElement(root, 'child')
child.text = '内容'
child.set('id', '1')
而E.method写法更紧凑,结构一目了然。在需要动态拼装报文或配置时,这种风格能减少出错概率。
序列化输出
构建好的树可用etree.tostring转为字节或字符串,也可写入文件:
from lxml import etree
from lxml.builder import E
doc = E.note(E.body('测试内容'))
tree = etree.ElementTree(doc)
tree.write('output.xml', pretty_print=True, xml_declaration=True, encoding='utf-8')
注意事项
- E.method生成的标签名遵循Python标识符规则,若需创建带连字符的标签,可借助E('tag-name')形式。
- 文本节点会自动转义特殊字符,无需手动处理。
- 大量循环构建时,仍应注意内存占用,必要时分块写入。
合理运用lxml的builder.E,可以让Python生成XML的代码既简洁又易维护,是处理结构化数据的实用技巧。
Pythonlxml_builderE_method修改时间:2026-07-26 04:48:16