通过部分标签名称获取 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
,则获取节点文本值
在 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
,则获取节点文本值