不幸的是,这是不可能的。查看实际的源代码,这个Element构建方法包含在文件中
lxml.etree.pyx
并且是简单的(没有docstring)
def Element(_tag, attrib=None, nsmap=None, **_extra):
return _makeElement(_tag, NULL, None, None, None, None, attrib, nsmap, _extra)
追踪这个
_makeElement
方法,我们在
api助手.pxi
,并声明为
cdef _Element _makeElement(tag, xmlDoc* c_doc, _Document doc,
_BaseParser parser, text, tail, attrib, nsmap,
dict extra_attrs):
因此,行为与ElementTree完全相同,我们可以定义标记名、属性字典、名称空间映射(这与元素树不同)以及将添加到属性映射的其他属性列表。这里需要注意的一点是,Element构造函数在lxml中作为函数提供,与ElementTree的等效类不同。
这个
Element
函数不能接受任何额外的位置参数,并且任何额外的关键字参数都用作元素中的属性。根本无法将尾部的值传递给元素构造函数。这个
_make元素
方法是私有api的一部分,没有简单的方法来访问它,但如果可以访问它,这可以提供一种方法(请注意,该函数的尾部值)。
当然,如果我们需要这样的功能,我们没有理由不编写一个函数来实现。
def TailedElement(tag,attrib=None,nsmap=None,tail=None,**extra):
x = ET.Element(tag,attrib,nsmap,**extra)
x.tail = tail
return x
为了证明这一点,
test = TailedElement("testel",{"testing":"yes"},tail="Tail Value")
ET.tostring(test)
# b'<testel testing="yes"/>Tail Value'
这有一个小的权衡。我们无法再指定名为
尾
作为额外的命名参数。然而,我们仍然可以通过将其添加到属性映射中来指定它。