XML解析与Python元素树
我试图解析一些只有时有xmlns设置的xml文件。 有什么方法可以确定它是否使用lxml库设置为w / o?
我的主要问题是使用find或findall查找元素时,如果由于标记不匹配而设置了命名空间,则不会返回任何内容。 但是我不能在命名空间中进行硬编码,因为有时候没有设置命名空间。 我真的不知道该怎么做。
这里是我的一些代码的示例
 tree = ET.parse(xml_file_path)
 root = tree.getroot() #ONIXmessage
 ...
 pids = product.findall("productidentifier")
 ...
所以我的主要问题是findall()方法
谢谢。
  我也很快会遇到这个问题/问题。  我的想法是:使用一个包装函数,首先尝试获取没有指定名称空间的元素,如果返回None ,则尝试使用名称空间。  如果两者都返回None,那么元素不存在。  如果没有提供默认命名空间,使用这两个函数(没有if-else)很好。 
如果选择是在相同的命名空间之间进行指定,那么我认为上面的方法是可以的。 如果你有多个可选的命名空间,它会使你的包装更加复杂,但这是一次性的工作。
希望看到一个更优雅的解决方案。 DanielHaley的答案是否有效?
相关选项:
find , findall等中指定名称空间。 register_namespace ,这适用于写出。 *来查找,但是这太泛泛,无法用来查找特定元素。 这有点痛苦,但是你可以在你的XPath中使用local-name()。
例如,而不是:
/foo/bar/baz
尝试:
/*[local-name()='foo']/*[local-name()='bar']/*[local-name()='baz']
