使用lxml时,XML能否不带命名空间属性渲染?
我正在用lxml生成一些XML,生成的节点是这样的:
<QBXML 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">
还有:
<MaxReturned py:pytype="int">
这些自定义属性让Quickbooks的解析器受不了。有没有办法让LXML生成的内容不带这些自定义的东西?
3 个回答
-2
如果你在使用
etree.fromstring(xml_response)
那么这样做:
xml_response.replace(' xmlns:', ' xmlnamespace:').replace(' xmlns=', ' xmlnamespace=')
就可以避免它解析命名空间。
0
如果你想要创建嵌套的XML结构,可以这样做:
from lxml import objectify
doc = objectify.ElementMaker(annotate=False)
doc = (objectify.E.configuration(getattr(objectify.E,'networklists'),name="acl.conf",description="Network Lists"))
objectify.deannotate(doc,cleanup_namespaces=True)
带有自定义属性的输出结果看起来是这样的:
<configuration description="Network Lists" name="acl.conf">
<network-lists>
</network-lists>
</configuration>
13
看起来下面的代码可以解决这个问题:
objectify.deannotate(root, xsi_nil=True)
etree.cleanup_namespaces(root)
或者,如果你使用的是 lxml 版本大于等于 2.3.2(感谢 @Pedru):
objectify.deannotate(root, cleanup_namespaces=True, xsi_nil=True)