如何在R中解析ECB API响应以获取规整的日期-数值数据
解析欧洲中央银行API返回的XML数据(R语言)
你已经通过httr2获取到ECB API的XML响应,接下来可以通过xml2工具包(配合tidyverse)解析出「日期-数值」格式的规整数据,以下是通用处理步骤:
1. 补充依赖包
首先确保安装并加载xml2(用于XML节点操作):
install.packages("xml2") library(xml2)
2. 提取并解析XML节点
ECB的API返回的是SDMX格式的XML,核心数据都在<Obs>节点中——每个节点包含日期(TIME_PERIOD属性)和汇率值(OBS_VALUE子节点)。我们可以通过节点选择和属性/文本提取来整理数据:
# 重新发送请求并获取XML对象 resp <- request("https://data-api.ecb.europa.eu/service/data/EXR/M.USD.EUR.SP00.A") %>% req_perform() %>% resp_body_xml() # 提取所有观测节点 obs_nodes <- xml_find_all(resp, ".//Obs") # 从节点中提取日期和数值,转换为数据框 exchange_rates <- tibble( date = xml_attr(obs_nodes, "TIME_PERIOD") %>% ymd(), # 转换为标准日期格式 rate = xml_find_first(obs_nodes, ".//OBS_VALUE") %>% xml_text() %>% as.numeric() ) # 查看整理后的结果 head(exchange_rates)
3. 通用逻辑说明
这种方法适用于大多数返回XML格式的API:
- 用
xml_find_all()定位到存储核心数据的重复节点(比如这里的<Obs>) - 用
xml_attr()提取节点属性,xml_find_first()+xml_text()提取子节点的文本内容 - 最后将提取到的向量整理成数据框,并做类型转换(日期、数值等)
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

