如何从XML提取指定元素并保存为Pandas DataFrame?
XML元素提取到Pandas DataFrame解决方案
首先需要明确XML的结构,以下是假设的示例XML结构(如果你的文件结构不同,只需调整代码中的节点路径即可):
示例XML结构:
<root> <stroke> <stroke-number>S001</stroke-number> <contract-number>C001</contract-number> <productdesc>Sample Product</productdesc> <stroke-label> <label-ref>L001</label-ref> <label-category>Category A</label-category> <label-type>Type X</label-type> <label-order>1</label-order> </stroke-label> </stroke> <stroke> <stroke-number>S002</stroke-number> <contract-number>C002</contract-number> <productdesc>Another Product</productdesc> <stroke-label> <label-ref>L002</label-ref> <label-category>Category B</label-category> <label-type>Type Y</label-type> <label-order>2</label-order> </stroke-label> </stroke> </root>
步骤1:导入所需库
import xml.etree.ElementTree as ET import pandas as pd
步骤2:解析XML并提取目标元素
# 解析XML文件,替换为你的实际文件路径 tree = ET.parse('your_file.xml') root = tree.getroot() # 初始化存储数据的列表 extracted_data = [] # 遍历所有stroke节点(XPath路径根据实际结构调整) for stroke_node in root.findall('.//stroke'): # 提取顶层元素,加入空值判断避免节点缺失报错 stroke_num = stroke_node.find('stroke-number').text if stroke_node.find('stroke-number') is not None else None contract_num = stroke_node.find('contract-number').text if stroke_node.find('contract-number') is not None else None product_desc = stroke_node.find('productdesc').text if stroke_node.find('productdesc') is not None else None # 提取stroke-label下的子元素 label_node = stroke_node.find('stroke-label') label_ref = label_node.find('label-ref').text if label_node and label_node.find('label-ref') is not None else None label_category = label_node.find('label-category').text if label_node and label_node.find('label-category') is not None else None label_type = label_node.find('label-type').text if label_node and label_node.find('label-type') is not None else None label_order = label_node.find('label-order').text if label_node and label_node.find('label-order') is not None else None # 将单条数据存入列表 extracted_data.append({ 'stroke-number': stroke_num, 'contract-number': contract_num, 'productdesc': product_desc, 'label-ref': label_ref, 'label-category': label_category, 'label-type': label_type, 'label-order': label_order }) # 转换为Pandas DataFrame result_df = pd.DataFrame(extracted_data)
步骤3:验证与保存结果
# 查看提取结果 print(result_df.head()) # 保存为CSV文件(可选) result_df.to_csv('extracted_stroke_data.csv', index=False, encoding='utf-8')
关键注意事项
- 替换代码中的
your_file.xml为你的实际XML文件路径。 - 如果XML节点层级或名称与示例不同,调整
findall和find中的XPath路径,比如节点嵌套更深时,使用./parent-node/stroke这类精确路径。 - 代码中加入了节点存在性判断,避免因部分节点缺失导致运行报错。
内容的提问来源于stack exchange,提问作者hiran
相关产品推荐
相关产品推荐

