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

如何从含多个XML文档的文件中提取所有inv-title标签内容?

提取多XML文档文件中所有<inv-title>内容的解决方案

你的问题根源在于:这个文件是两个独立的XML文档直接拼接而成,并非标准的单根XML结构,普通XML解析器只会解析到第一个文档结束就停止,因此只能获取第一个<inv-title>的值。下面提供两种可行的解决方法:

方法一:用lxml的iterparse逐元素解析

这种方法无需完整加载文档,会逐个处理XML元素,能覆盖所有独立文档中的目标标签:

from lxml import etree

# 注意:原代码里的文件后缀是.json,应为笔误,改成实际的XML文件名
MiFile = 'C:\\Users\\TestFilePat.xml'

# 逐元素解析,处理每个<inv-title>标签
for event, elem in etree.iterparse(MiFile, events=('end',), recover=True):
    if elem.tag == 'inv-title':
        # 提取并清理文本内容(去掉前后空格)
        print(elem.text.strip())
    # 清理已处理的节点,节省内存
    elem.clear()

方法二:拆分独立文档后分别解析

修复你之前的拆分逻辑,解决最后一个文档未处理的问题,同时优化判断条件:

import xml.etree.ElementTree as ET

MiFile = 'C:\\Users\\TestFilePat.xml'

accumulate_xml = []
with open(MiFile, 'r', encoding='utf-8') as file1:
    for line in file1:
        stripped_line = line.strip()
        # 遇到新的XML声明或DOCTYPE时,处理上一个积累的文档
        if stripped_line.startswith(('<?xml', '<!DOCTYPE')):
            if accumulate_xml:
                xml_str = ''.join(accumulate_xml)
                try:
                    tree = ET.fromstring(xml_str)
                    inv_title = tree.find('.//inv-title').text.strip()
                    print(inv_title)
                except Exception as e:
                    print(f"解析出错: {e}")
                accumulate_xml = []
            accumulate_xml.append(stripped_line)
        elif stripped_line:  # 跳过空行,积累有效XML内容
            accumulate_xml.append(stripped_line)
    # 处理最后一个未被解析的文档
    if accumulate_xml:
        xml_str = ''.join(accumulate_xml)
        try:
            tree = ET.fromstring(xml_str)
            inv_title = tree.find('.//inv-title').text.strip()
            print(inv_title)
        except Exception as e:
            print(f"解析最后一个文档出错: {e}")

额外注意事项

  • 原代码中MiFile的后缀写为.json,属于笔误,需改为实际的XML文件后缀
  • 如果XML文件存在编码问题,打开文件时需指定对应编码(如encoding='utf-8')

内容的提问来源于stack exchange,提问作者Juliana Rivera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:22:47