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

时间:2011-06-15 22:59:42

标签: python lxml

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

答案 0 :(得分:3)

如果命名空间在文档中,则文档使用命名空间。命名空间正在这些节点中使用,因为这些节点是声明命名空间的子树的一部分。按照Daenyth提供的链接删除它们,或者在将它们转换为lxml对象之前将其从XML字符串中剥离。