如何用xml.etree.ElementTree提取XML指定元素值并写入DataFrame
处理带命名空间的XML提取CtrlSum到DataFrame
当XML包含命名空间时,xml.etree.ElementTree要求必须显式指定命名空间才能正确定位元素,直接用标签名查询会因为命名空间前缀缺失返回空结果。以下是解决步骤:
提取或定义命名空间映射
从根元素的xmlns属性获取命名空间,或者手动指定(如果已知):import xml.etree.ElementTree as ET import pandas as pd # 解析XML文件 tree = ET.parse('your_xml_file.xml') root = tree.getroot() # 提取命名空间(假设根元素只有一个xmlns属性) ns = {'ns': root.attrib['xmlns']} # 如果知道命名空间URL,也可以直接写:ns = {'ns': 'http://your-namespace-url'}使用命名空间查询目标元素
在findall方法中传入命名空间映射,用ns:标签名的形式定位元素:# 查询所有层级下的CtrlSum元素 ctrl_sum_elements = root.findall('.//ns:CtrlSum', namespaces=ns)提取值并生成DataFrame
遍历查询到的元素,提取文本值后转为DataFrame:ctrl_sum_values = [elem.text for elem in ctrl_sum_elements] df = pd.DataFrame({'CtrlSum': ctrl_sum_values})
关键说明
之前你用root.findall(".//GrpHdr")返回空,是因为带命名空间的元素实际标签名是{命名空间URL}GrpHdr,而非单纯的GrpHdr。通过命名空间映射,ElementTree会自动将ns:GrpHdr解析为完整的带命名空间标签名,从而正确匹配元素。
内容的提问来源于stack exchange,提问作者Pattinger
相关产品推荐
相关产品推荐

