使用lxml时,是否可以在没有命名空间属性的情况下呈现XML?

时间:2011-02-22 22:23:47

标签: python lxml

我使用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 个答案:

答案 0 :(得分:7)

看起来如下照顾它:

objectify.deannotate(root, xsi_nil=True)
etree.cleanup_namespaces(root)

或者,如果使用lxml&gt; = 2.3.2(感谢@Pedru):

objectify.deannotate(root, cleanup_namespaces=True, xsi_nil=True)

答案 1 :(得分:0)

如果您正在使用

etree.fromstring(xml_response)

然后这样做:

xml_response.replace(' xmlns:', ' xmlnamespace:').replace(' xmlns=', ' xmlnamespace=')

避免它解析名称空间

答案 2 :(得分: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>