python lxml 添加了未使用的命名空间

1 投票
1 回答
799 浏览
提问于 2025-04-16 19:39

我在使用lxml的find()方法选择一个xml文件中的节点时遇到了问题。简单来说,我想把一个节点从一个xml文件移动到另一个文件。

文件1:

<somexml xmlns:a='...' xmlns:b='...' xmlns:c='...'>
    <somenode id='foo'>
        <something>bar</something>
    </somenode>
</somexml>

当我解析文件1并对其进行查找时:

node = tree.find('//*[@id="foo"]')

节点看起来是这样的:

<somenode xmlns:a='...' xmlns:b='...' xmlns:c='...'>
    <something>bar</something>
</somenode>

注意到它把文档中找到的命名空间添加到了那个节点上。然而,那个节点里没有任何内容使用这些命名空间。我该怎么做才能 A) 不写那些在选定节点中没有使用的命名空间,或者 B) 删除未使用的命名空间声明?如果在选定的节点中使用了命名空间,那我需要保留它,但如果没有,我希望把它们去掉。有任何想法吗?谢谢!

1 个回答

3

如果文档里有命名空间,那这个文档就会使用这些命名空间。这些命名空间在那些节点中被使用,因为这些节点属于声明了命名空间的子树。可以按照Daenyth提供的链接去移除它们,或者在把XML字符串转换成lxml对象之前,先把它们去掉。

撰写回答