如何使用lxml builder/E-factory在XML标记中使用点

如何使用lxml builder/E-factory在XML标记中使用点,xml,python-3.x,lxml,Xml,Python 3.x,Lxml,(Python3.6.)我正在使用它为一个API生成一些XML,该API需要一些XML标记来包含一个点。假设一个特定的标记必须是 到目前为止,我发现的lxml构建器示例都是xml标记的硬代码。(我还没有找到如何使用变量来指定xml标记——可以吗?) 无论如何,这样做,标记中的点将被解释为方法点。作为解决方法,我首先用下划线指定标记: import lxml.etree import lxml.builder E = lxml.builder.ElementMaker() terms = ['

(Python3.6.)我正在使用它为一个API生成一些XML,该API需要一些XML标记来包含一个点。假设一个特定的标记必须是

到目前为止,我发现的lxml构建器示例都是xml标记的硬代码。(我还没有找到如何使用变量来指定xml标记——可以吗?) 无论如何,这样做,标记中的点将被解释为方法点。作为解决方法,我首先用下划线指定标记:

import lxml.etree
import lxml.builder

E = lxml.builder.ElementMaker() 
terms = ['eggs', 'bacon', 'sausage', 'spam']

xmllist = E.recordList()
for term in terms: 
    xmlrecord = E.record(
        E.term_ID(term)         # term_ID should become term.ID
    )    
    xmllist.append(xmlrecord)

wrap = (E.someXMLdialect())     # wrap has type <class 'lxml.etree._Element'>
wrap.append(xmllist)     

# convert wrap to string, replace the underscore in term_ID with a dot
s = lxml.etree.tostring(wrap).replace(b'term_ID', b'term.ID')
with open('sample_2.xml', 'wb') as f:
    f.write(s)
导入lxml.etree
导入lxml.builder
E=lxml.builder.ElementMaker()
术语=[‘鸡蛋’、‘培根’、‘香肠’、‘垃圾邮件’]
xmllist=E.recordList()
对于术语:
xmlrecord=E.record(
E.term_ID(term)#term_ID应成为term.ID
)    
追加(xmlrecord)
wrap=(E.someXmlDialogue())#wrap具有类型
wrap.append(xmllist)
#将换行转换为字符串,将术语_ID中的下划线替换为点
s=lxml.etree.tostring(wrap).replace(b'term_ID',b'term.ID'))
以open('sample_2.xml','wb')作为f:
f、 书写
最后,我将xml转换为字符串,以便使用
replace
将下划线替换为点,然后将结果写入字节流

我选择lxml builder是为了易于使用和性能,但必须恢复到这种解决方法会降低易用性

所以我想知道是否有更好的,更像蟒蛇的方法


请注意,
E.term\u ID
不是字符串。如果是,我可以使用
E.term\uff0EID
from

ElementMaker
允许您将元素名称作为字符串传递

for term in terms: 
    xmlrecord = E.record(
        E("term.ID", term)    # This works
    )    

请参阅。

谢谢!我想这意味着我也可以使用变量作为标记。美好的