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

使用lxml处理XML数据:单文件代码报错与批量处理需求

问题修复与XML批量数据提取实现

一、单文件代码错误修复

原代码存在三个核心错误:

  • 文件名列表错误调用encode:serial是包含文件名的列表,不能直接调用encode,需先读取文件内容。
  • XPath节点名大小写不匹配:XML根节点为<reixmlPrenos>,原代码写为reiXmlPrenos,导致无法定位节点。
  • XPath元素提取方式错误:A和z是XML子元素而非节点属性,不能用./@A,需用./A/text()提取元素文本。

修复后的单文件运行代码:

from lxml import etree
import pandas as pd

filename = "S1.xml"
# 读取目标文件内容
with open(filename, 'r', encoding='utf-8') as f:
    content = f.read()
doc = etree.XML(content.encode('utf-8'))

# 准确定位根节点并提取目标字段
root = doc.xpath('/reixmlPrenos')[0]
a_val = float(root.xpath("./A/text()")[0])
z_val = float(root.xpath("./z/text()")[0])

# 生成符合要求的DataFrame
df = pd.DataFrame({'A': [a_val], 'z': [z_val]}, index=[filename])
print(df)

二、批量处理同目录所有XML文件

使用glob模块遍历当前目录下所有.xml文件,循环提取数据并合并为单个DataFrame:

from lxml import etree
import pandas as pd
import glob

# 初始化数据存储容器
data_records = []
file_names = []

# 遍历所有xml文件
for file_path in glob.glob("*.xml"):
    # 读取并解析xml文件
    with open(file_path, 'r', encoding='utf-8') as f:
        xml_content = f.read()
    xml_doc = etree.XML(xml_content.encode('utf-8'))
    
    # 提取目标字段并转换为数值类型
    root_node = xml_doc.xpath('/reixmlPrenos')[0]
    a_value = float(root_node.xpath("./A/text()")[0])
    z_value = float(root_node.xpath("./z/text()")[0])
    
    # 存储单文件数据与文件名
    data_records.append({'A': a_value, 'z': z_value})
    file_names.append(file_path)

# 合并生成最终DataFrame
final_df = pd.DataFrame(data_records, index=file_names)
# 可选:按文件名排序
final_df = final_df.sort_index()
print(final_df)

三、关键说明

  • glob.glob("*.xml"):快速获取当前目录下所有XML文件的路径
  • 字段转换为float类型:确保后续可进行数值计算或统计分析
  • 文件名作为索引:完全匹配你期望的输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:15:45