【发布时间】:2021-12-20 21:49:20
【问题描述】:
我正在从 python xml 切换到 lxml。我遇到了 lxml 对命名空间有相当严格的政策。
我想生成一个带有多个冗余 xmlns:ns0 命名空间声明的 xml。但是,lxml 会从子元素中剥离此命名空间。
如何通过 lxml 定义冗余命名空间?
<?xml version="1.0" ?>
<env:Envelope xmlns:env="some URI" xmlns:ns0="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<ns0:getLabelResponseElement>
<ns0:result>
<ns1:statusMessage xmlns:ns0="http://www.w3.org/2001/XMLSchema"></ns1:statusMessage>
</ns0:result>
</ns0:getLabelResponseElement>
</env:Body>
</env:Envelope>
【问题讨论】:
-
我希望您有充分的理由需要这些冗余的命名空间声明?请在您的问题中添加您的理由 - 否则很难知道该建议什么。
-
这大概是因为接收者使用了一些自制的方法来解析 XML。恐怕我们在 StackOverflow 上得到了很多这样的信息:尝试手动处理 XML 的人,然后发现他们只能处理一个相当奇特的 XML 子集,从而导致需要生成这个相当奇特子集的人提出问题。这一切都是因为人们没有意识到标准一致性的重要性。
-
@kimbert 原因是为了重现旧版 Java 服务的响应。
-
很抱歉继续提问,但是......如果这些 xmlns 属性是 冗余 那么为什么需要重现它们呢?无论哪种方式,XML 都是有效的。这肯定有商业原因,因为我想不出技术原因。
-
@kimbert 此响应 XML 可能会被正则表达式解析。我不确定。
标签: python xml lxml xml-namespaces