pythonlxml创建具有特定名称空间和结构的xml

2024-09-30 14:23:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从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生成正确的根节点,我应该在代码中做什么更改


Tags: 文件代码应用程序http节点customexportinvoice
1条回答
网友
1楼 · 发布于 2024-09-30 14:23:55

你需要使用

rootNs = etree.QName(ns0, "SalesInvoice_Custom_Xml")

^{pr2}$

整个数据结构本身与您以后可能应用的任何名称空间映射无关,也就是说,标记知道真正的名称空间(例如http://EDI-export/Invoice),而不是它们的映射(例如ns0)。在

稍后,当您最终将其序列化为字符串时,需要一个名称空间映射。然后,(而且仅在那时)将使用名称空间映射。在

另外,在解析之后,您可以询问etree对象在解析过程中找到了什么命名空间映射。但这不是结构的一部分,它只是关于结构如何被编码为字符串的附加信息。请考虑以下两个XML在逻辑上是相等的:

<x:tag xmlns:x="namespace"></x:tag>

以及

<y:tag xmlns:y="namespace"></y:tag>

解析后,它们的结构将是相等的,它们的命名空间映射将不相等。在

相关问题 更多 >