使用/ Python Elementtree进行XML解析 - 有时未指定命名空间

时间:2014-04-08 19:09:41

标签: python xml elementtree

我试图解析一些有时只设置了xmlns的xml文件。有没有办法确定它是否使用lxml库设置?

我的主要问题是当使用find或findall查找元素时,如果由于标记不匹配而设置了命名空间,则不会返回任何内容。但我无法对命名空间进行硬编码,因为有时候没有设置命名空间。我真的不知道如何解决这个问题。

这是我的部分代码

的示例
 tree = ET.parse(xml_file_path)
 root = tree.getroot() #ONIXmessage
 ...
 pids = product.findall("productidentifier")
 ...

所以我的主要问题是findall()方法

感谢。

2 个答案:

答案 0 :(得分:0)

这有点痛苦,但您可以在XPath中使用local-name()

例如,而不是:

/foo/bar/baz

尝试:

/*[local-name()='foo']/*[local-name()='bar']/*[local-name()='baz']

答案 1 :(得分:0)

我很快就会遇到这个问题/问题。我的想法是:使用一个首先尝试获取没有指定命名空间的元素的包装函数,如果返回None,则尝试使用命名空间。如果两者都返回None,则元素不存在。如果没有提供默认命名空间,则使用这两个函数(不使用if-else)可以很好地工作。

如果选择是在指定的同一命名空间之间,那么我认为上面的方法是可以的。如果你有多个可选命名空间,它会使你的包装器更复杂,但它是一次性的。

虽然希望看到一个更优雅的解决方案。 DanielHaley的回答是否有效?

相关选项: