通过部分标签名称获取 elementtree 标签文本

Getting elementtree tag texts by partial tag names

在 XML 文档中,我有一个带有 DateTime 标签的元素,可以使用以下方法提取:

for elem in xml_tree_root.iter(tag='DateTime'):
    print(elem.text)

在同一 XML 文件的另一个版本中,标签的名称是 blahblooDateTimebloobli。所以我需要类似的东西:

for elem in xml_tree_root.iter(tag='*DateTime*'):
    print(elem.text)

这对 XML 的两个版本都适用。但是对于后者,它不起作用。它匹配所有内容,如果我只输入 '*' ,这意味着原则上它必须以某种方式工作。我的问题是是否可以将正则表达式提供给 elementtree iter 搜索?

element.iter的文档很清楚:

iter(tag=None)

[...] If tag is not None or '*', only elements whose tag equals tag are returned from the iterator.

所以不支持通配符,除了一个完整的百搭:'*'.

如果您知道这两个变体,那么只需链接两个迭代器:

from itertools import chain

for elem in chain(xml_tree_root.iter(tag='DateTime'), xml_tree_root.iter(tag='blahblooDateTimebloobli')):
    print(elem.text)

您似乎只想获取包含 DateTime 子字符串的所有标签的文本。

在这种情况下,您可以使用

values = [e.text for e in xml_tree_root.iter('*') if 'DateTime' in e.tag]
print(values)

即遍历所有标签,如果标签名包含DateTime,则获取节点文本值