使用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)删除未使用的名称空间声明?如果它在所选节点中使用,那么我将需要它,否则,我想摆脱它们。有任何想法吗?谢谢!
答案 0 :(得分:3)
如果命名空间在文档中,则文档使用命名空间。命名空间正在这些节点中使用,因为这些节点是声明命名空间的子树的一部分。按照Daenyth提供的链接删除它们,或者在将它们转换为lxml
对象之前将其从XML字符串中剥离。