如何为lxml Element添加属性?xmlns:xsi属性添加报错求助
解决lxml ElementMaker添加带冒号属性(如xmlns:xsi)的问题
这个问题我之前也碰到过!核心原因是Python的关键字参数语法不允许包含冒号,所以直接写xmlns:xsi="..."肯定会报错,哪怕给属性名加引号也没用。下面给你两种可行的解决办法:
方法1:使用字典展开传递带特殊字符的属性
把带冒号的属性放在字典里,通过**语法展开作为关键字参数传递,这样就能绕过Python的关键字参数限制:
from lxml.builder import ElementMaker E = ElementMaker() outer = E.outer header = E.Header field1 = E.field1 field2 = E.field2 # 定义包含命名空间属性的字典 ns_attrs = { "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance" } # 构建文档,用**展开属性字典 the_doc = outer( **ns_attrs, header( field1('some value1', name='blah'), field2('some value2', name='asdfasd'), ) )
方法2:先创建元素,再用set()方法添加属性
如果觉得字典展开不够直观,也可以先创建outer元素,再调用元素的set()方法手动添加带冒号的属性:
from lxml.builder import ElementMaker E = ElementMaker() header = E.Header field1 = E.field1 field2 = E.field2 # 先创建outer元素(不带命名空间属性) the_doc = E.outer( header( field1('some value1', name='blah'), field2('some value2', name='asdfasd'), ) ) # 手动添加xmlns:xsi属性 the_doc.set("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
另外注意你代码里的小错误:你定义了header = E.Header,但构建文档时写的是XML_2_HEADER,这会导致NameError,记得改成header哦。
内容的提问来源于stack exchange,提问作者Jal
相关产品推荐
相关产品推荐

