objectify
使用库的API 为元素设置值,默认情况下lxml
将自动检测分配pytype
给该元素和所需的命名空间。
例如,设置根元素:
root = objectify.Element('root')
print(etree.tostring(root, pretty_print=True).decode('utf-8'))
输出:
<root xmlns:py="http://codespeak.net/lxml/objectify/pytype"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" py:pytype="TREE"/>
或为子元素设置值:
child = objectify.SubElement(root, 'child')
root.child = 'value'
print(etree.tostring(root, pretty_print=True).decode('utf-8'))
输出:
<root xmlns:py="http://codespeak.net/lxml/objectify/pytype"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" py:pytype="TREE">
<child py:pytype="str">value</child>
</root>
即使使用 ObjectPath 的 setattr:
path = objectify.ObjectPath('root.vader.son')
path.setattr(root, 'Luke')
print(etree.tostring(root, pretty_print=True).decode('utf-8'))
输出:
<root xmlns:py="http://codespeak.net/lxml/objectify/pytype"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" py:pytype="TREE">
<child py:pytype="str">value</child>
<vader>
<son py:pytype="str">Luke</son>
</vader>
</root>
有一些解决方案可以在创建元素后使用该函数删除pytype
及其命名空间(例如,使用 lxml 时,是否可以在没有命名空间属性的情况下呈现 XML?,使用 lxml.objectify 删除“xmlns:py ...”)。没有任何解决方案可以从一开始就创建没有 the 及其名称空间的元素。关于如何做到这一点的任何想法?deannotate()
pytype