如何在ElementTree中迭代多个匹配元素而非仅首个匹配元素
解决ElementTree匹配多XML标签的问题
你的代码里root.iter('PROCESSING_LEVEL' or 'processingLevel')的写法存在逻辑错误——Python中只要第一个字符串非空,or运算就会直接返回它,所以iter只会遍历其中一个标签,不会同时处理两个不同大小写的版本。
下面两种方法可以解决这个问题,遍历所有匹配的标签:
方法1:遍历标签名列表
把需要匹配的标签名放进列表,逐个调用iter遍历:
tree = ET.parse(filepath) root: Element = tree.getroot() # 定义所有要匹配的目标标签 target_tags = ['PROCESSING_LEVEL', 'processingLevel'] for tag in target_tags: for processing_level in root.iter(tag): print(f'Processing level: {processing_level.text}') text.insert('1.0', processing_level.text + '\n') text2.insert('1.0', processing_level.text + '\n')
方法2:使用XPath表达式
ElementTree支持XPath,用|运算符同时匹配多个标签:
tree = ET.parse(filepath) root: Element = tree.getroot() # 通过XPath匹配两个不同大小写的标签 for processing_level in root.findall('.//PROCESSING_LEVEL | .//processingLevel'): print(f'Processing level: {processing_level.text}') text.insert('1.0', processing_level.text + '\n') text2.insert('1.0', processing_level.text + '\n')
这两种方式都能提取所有符合条件的标签内容,不会只处理首个匹配项。
内容的提问来源于stack exchange,提问作者Kamil X
相关产品推荐
相关产品推荐

