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的答案是否有效?

相关选项:

  • 还有这个答案在findfindall等中指定名称空间。
  • 可以根据这里的解决方案尝试register_namespace ,这适用于写出。
  • 这个建议使用*来查找,但是这太泛泛,无法用来查找特定元素。
  • 完全禁用名称空间
  • 如果绝望,你可以尝试使用正则表达式

  • 这有点痛苦,但是你可以在你的XPath中使用local-name()。

    例如,而不是:

    /foo/bar/baz
    

    尝试:

    /*[local-name()='foo']/*[local-name()='bar']/*[local-name()='baz']
    
    链接地址: http://www.djcxy.com/p/58799.html

    上一篇: XML Parsing w/ Python Element Tree

    下一篇: Programatically clean/ignore namespaces in XML