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']
链接地址: http://www.djcxy.com/p/58799.html