繁体   English   中英

带Python元素树的XML解析-有时未指定命名空间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM