You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量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安装),可通过以下命令批量处理:

  1. 创建输出目录:
mkdir -p text_output
  1. 批量转换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:25:38