[英]XML Parsing w/ Python Element Tree - Namespace sometimes not specified
我正在尝试解析一些有时仅设置xmlns的xml文件。 有什么方法可以确定是否使用lxml库对其进行了设置?
我的主要问题是,使用find或findall查找元素时,如果设置了名称空间,则不会返回任何内容,因为标记不匹配。 但是我无法对名称空间进行硬编码,因为有时没有设置名称空间。 我真的不知道该怎么做。
这是我的一些代码示例
tree = ET.parse(xml_file_path)
root = tree.getroot() #ONIXmessage
...
pids = product.findall("productidentifier")
...
所以我的主要问题是findall()方法
谢谢。
这有点痛苦,但是您可以在XPath中使用local-name() 。
例如,代替:
/foo/bar/baz
尝试:
/*[local-name()='foo']/*[local-name()='bar']/*[local-name()='baz']
我很快也会遇到这个问题。 我的想法是:使用包装函数,该函数首先尝试获取未指定名称空间的元素,如果返回None
,则尝试使用名称空间。 如果两个都返回None,则元素不存在。 如果未提供默认名称空间,则使用这两个函数(不使用if-else)会很好地工作。
如果选择是在指定还是不指定相同的名称空间之间,那么我认为上述方法是可以的。 如果您有多个可选名称空间,它将使您的包装器更加复杂,但这是一次性的工作。
不过,我们希望看到一个更优雅的解决方案。 DanielHaley的答案有效吗?
相关选项:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.