使用Python的root.iter解析XML无法获取<w>标签文本问题
问题原因及解决方案
你的代码无法提取<w>标签文本,核心问题是XML文档使用了默认命名空间。根元素<CHAT>中的xmlns="http://www.talkbank.org/ns/talkbank"定义了全局默认命名空间,所有未加前缀的标签(包括<w>)都属于该命名空间,直接用root.iter('w')无法匹配到目标标签。
以下是三种可行的解决方法:
方法1:显式指定命名空间匹配
直接使用完整的命名空间标签名查找,或者注册命名空间前缀后简化查找:
import xml.etree.ElementTree as ET tree = ET.parse('020012_doctored.xml') root = tree.getroot() # 方式1:直接使用完整命名空间标签名 for w in root.iter('{http://www.talkbank.org/ns/talkbank}w'): print(w.text) # 方式2:注册命名空间前缀,用前缀简化查找 ns = {'tb': 'http://www.talkbank.org/ns/talkbank'} for w in root.findall('.//tb:w', ns): print(w.text)
方法2:忽略命名空间,通过本地标签名匹配
遍历所有标签,提取标签名的本地部分进行判断:
import xml.etree.ElementTree as ET tree = ET.parse('020012_doctored.xml') root = tree.getroot() for elem in root.iter(): # 拆分命名空间和本地标签名 local_tag = elem.tag.split('}')[-1] if local_tag == 'w': print(elem.text)
内容的提问来源于stack exchange,提问作者Nick Riches
相关产品推荐
相关产品推荐

