批量XML转文本需求:仅保留指定标签,移除冗余标签
批量XML转文本文件解决方案
针对批量提取XML指定标签、移除冗余内容并处理多报道的需求,以下是两种可行方案:
方案一:Python脚本(灵活适配复杂场景)
用Python标准XML解析库可轻松处理批量文件和多报道结构,以下是可直接修改使用的脚本:
import os import xml.etree.ElementTree as ET # 配置参数 INPUT_DIR = "./xml_files" # 你的XML文件存放目录 OUTPUT_DIR = "./text_output" # 文本文件输出目录 # 替换为XML中包裹单篇报道的节点名(比如<Article>、<Report>) REPORT_NODE = "Article" # 需要保留的目标标签 TARGET_TAGS = ["Source", "Date", "Headline", "Text"] # 创建输出目录 os.makedirs(OUTPUT_DIR, exist_ok=True) # 遍历所有XML文件 for filename in os.listdir(INPUT_DIR): if not filename.endswith(".xml"): continue xml_path = os.path.join(INPUT_DIR, filename) text_filename = os.path.splitext(filename)[0] + ".txt" text_path = os.path.join(OUTPUT_DIR, text_filename) try: tree = ET.parse(xml_path) root = tree.getroot() with open(text_path, "w", encoding="utf-8") as f: # 遍历每一篇报道 for report in root.findall(REPORT_NODE): # 提取并写入目标标签内容 for tag in TARGET_TAGS: element = report.find(tag) if element is not None and element.text: f.write(f"*{tag}*: {element.text.strip()}\n") # 不同报道之间加分隔线 f.write("---\n") print(f"处理完成:{filename}") except Exception as e: print(f"处理失败 {filename}: {str(e)}")
使用说明:
- 修改
INPUT_DIR和OUTPUT_DIR为实际路径 - 确认
REPORT_NODE与XML中包裹单篇报道的节点名一致(若无外层报道节点,直接遍历root下的目标标签即可) - 无需额外安装依赖,Python标准库即可运行
方案二:命令行工具组合(快速处理,无需编程)
若系统自带xmllint(Linux/macOS默认有,Windows可通过Git Bash安装),可通过以下命令批量处理:
- 创建输出目录:
mkdir -p text_output
- 批量转换XML文件(假设报道节点为
<Article>):
for file in xml_files/*.xml; do base=$(basename "$file" .xml) # 提取每篇报道的目标标签并整理格式 xmllint --xpath '//Article' "$file" | awk ' /<Source>/{gsub(/<\/?Source>/,""); print "*Source*: " $0} /<Date>/{gsub(/<\/?Date>/,""); print "*Date*: " $0} /<Headline>/{gsub(/<\/?Headline>/,""); print "*Headline*: " $0} /<Text>/{gsub(/<\/?Text>/,""); print "*Text*: " $0} /<\/Article>/{print "---"} ' > text_output/"$base".txt done
注意事项:
- 先拿单个文件测试命令,确认标签匹配无误后再批量执行
- 标签大小写敏感,需严格匹配XML中的标签名称
- 遇编码问题可在
xmllint后添加--encode utf-8参数
内容的提问来源于stack exchange,提问作者Salman Shafi
相关产品推荐
相关产品推荐

