我试图从python应用程序创建一个XML导出,需要以特定的方式为文件的外部接收者构造文件。在
根节点需要有名称空间,但子节点不应该。在
的根节点应如下所示:
<ns0:SalesInvoice_Custom_Xml xmlns:ns0="http://EDI-export/Invoice">...</ns0:SalesInvoice_Custom_Xml>
我尝试在Python2.7上使用lxml
库生成相同的节点,但它的行为与预期不符。在
下面是生成根节点的代码:
^{pr2}$这将产生以下输出
<ns1:SalesInvoice_Custom_Xml xmlns:ns0="http://EDI-export/Invoice" xmlns:ns1="ns0">...</ns1:SalesInvoice_Custom_Xml>
为了让lxml
生成正确的根节点,我应该在代码中做什么更改
你需要使用
与
^{pr2}$整个数据结构本身与您以后可能应用的任何名称空间映射无关,也就是说,标记知道真正的名称空间(例如
http://EDI-export/Invoice
),而不是它们的映射(例如ns0
)。在稍后,当您最终将其序列化为字符串时,需要一个名称空间映射。然后,(而且仅在那时)将使用名称空间映射。在
另外,在解析之后,您可以询问etree对象在解析过程中找到了什么命名空间映射。但这不是结构的一部分,它只是关于结构如何被编码为字符串的附加信息。请考虑以下两个XML在逻辑上是相等的:
以及
解析后,它们的结构将是相等的,它们的命名空间映射将不相等。在
相关问题 更多 >
编程相关推荐