如何从XML文件中获取数据?附使用的XML示例代码
从XML中提取数据的实用方法
嘿,我来帮你搞定从这段XML里提取数据的事儿!先把你提供的XML片段整理得更清晰些:
<?xml version="1.0" encoding="utf-8" ?> <body copyright="All data copyright Rutgers University 2018."> <predictions agencyTitle="Rutgers University" routeTitle="Weekend 2" routeTag="wknd2" stopTitle="Quads" stopTag="quads"> <direction title="To College Avenue Student Center"> <prediction epochTime="1524963905243" seconds="1108" minutes="18" isDeparture="false" affectedByLayover="true" dirTag="wknd2_inbound" vehicle="4182" block="WK2R04"/> </direction> </predictions> </body>
下面我用两种常用的Python方法来演示如何提取你需要的数据:
方法一:用Python内置的xml.etree.ElementTree
这是Python自带的XML解析工具,不需要额外安装,适合处理结构简单的XML。
示例代码:
import xml.etree.ElementTree as ET # 如果是读取XML文件 tree = ET.parse('your_xml_file.xml') root = tree.getroot() # 如果是处理XML字符串,用下面这行替代上面两行 # root = ET.fromstring(your_xml_string) # 提取body标签的copyright属性 print("版权信息:", root.attrib['copyright']) # 提取predictions标签的属性 predictions_node = root.find('predictions') print("机构名称:", predictions_node.attrib['agencyTitle']) print("路线名称:", predictions_node.attrib['routeTitle']) print("站点名称:", predictions_node.attrib['stopTitle']) # 提取direction和prediction的信息 direction_node = predictions_node.find('direction') print("行驶方向:", direction_node.attrib['title']) prediction_node = direction_node.find('prediction') print("预计到达分钟数:", prediction_node.attrib['minutes']) print("车辆编号:", prediction_node.attrib['vehicle'])
方法二:用lxml库(支持XPath,更适合复杂XML)
lxml是功能更强的解析库,支持XPath查询,处理复杂嵌套的XML会更高效。先安装它:
pip install lxml
示例代码:
from lxml import etree # 解析XML文件 tree = etree.parse('your_xml_file.xml') # 用XPath直接定位提取数据 # 获取body的版权信息 copyright_info = tree.xpath('/body/@copyright')[0] print("版权信息:", copyright_info) # 获取路线名称 route_title = tree.xpath('/body/predictions/@routeTitle')[0] print("路线名称:", route_title) # 获取预计到达分钟数和车辆编号 prediction_attrs = tree.xpath('/body/predictions/direction/prediction')[0].attrib print("预计到达分钟数:", prediction_attrs['minutes']) print("车辆编号:", prediction_attrs['vehicle'])
小提示
- XML节点的属性都存在
attrib字典里,直接通过键名就能获取 find()方法会返回第一个匹配的子节点,findall()会返回所有匹配的节点列表- XPath语法可以让你像文件路径一样直接定位到目标节点,比如
/body/predictions/direction就是从根节点到prediction父节点的完整路径
内容的提问来源于stack exchange,提问作者Tisymc
相关产品推荐
相关产品推荐

