使用Python ElementTree提取XML标签及其子标签文本
解决XML中标签含子标签的文本提取及DataFrame存储问题
ElementTree的text属性仅能获取标签的直接文本,要提取包含子标签在内的全部文本,用itertext()方法即可解决——它会递归遍历目标标签及其所有子元素,自动收集所有文本片段。
完整实现代码
import xml.etree.ElementTree as ET import pandas as pd # 1. 解析本地XML文件 tree = ET.parse("your_local_file.xml") # 替换为你的XML文件路径 root = tree.getroot() # 2. 提取所有<z>标签的完整文本(含子标签内容) z_contents = [] for z_tag in root.findall(".//z"): # 拼接所有文本片段并去除首尾空白 full_text = "".join(z_tag.itertext()).strip() z_contents.append(full_text) # 3. 转换为指定格式的DataFrame df = pd.DataFrame({"z_tag_content": z_contents}) # 可选:若需保留<z>标签属性(如id),可扩展列 # z_contents = [] # for z_tag in root.findall(".//z"): # full_text = "".join(z_tag.itertext()).strip() # z_id = z_tag.get("id") # 假设<z>标签存在id属性 # z_contents.append({"tag_id": z_id, "content": full_text}) # df = pd.DataFrame(z_contents)
关键说明
root.findall(".//z"):通过XPath表达式递归查找XML结构中所有层级的标签,无需关注其所在位置。 z_tag.itertext():返回迭代器,依次输出当前标签及其所有嵌套子标签(如<std>、<italic>)的文本内容。"".join(...):将零散的文本片段拼接为完整字符串,strip()用于清理首尾多余的空白字符。
内容的提问来源于stack exchange,提问作者SlowBear
相关产品推荐
相关产品推荐

