如何从XML网页提取BIS每日汇率历史核心数据
BIS每日汇率XML数据提取方案
核心思路
BIS返回的是SDMX标准格式的XML文件,核心数据都嵌套在指定命名空间的观测节点中,需要先处理命名空间,再定位数据节点提取属性。
具体实现步骤
- 定义命名空间:从XML根节点的
xmlns属性中提取message等命名空间,确保节点查找不失效。 - 定位数据节点:用
xml_find_all定位message:DataSet下的所有message:Obs节点,这些就是每日汇率的核心数据条目。 - 提取属性字段:从每个
Obs节点中提取日期、汇率值、货币代码等属性,转换为易处理的数据框格式。
完整代码示例
library(xml2) library(dplyr) # 读取XML数据源 u <- "https://stats.bis.org/api/v1/data/WS_XRU_D/D.RU../all?detail=full" d <- xml2::read_xml(u) # 解析XML的命名空间 ns <- xml_ns(d) # 抓取所有观测数据节点 observations <- xml_find_all(d, ".//message:Obs", ns) # 提取关键属性并转换为数据框 exchange_rate_data <- tibble( 日期 = xml_attr(observations, "TIME_PERIOD"), 货币代码 = xml_attr(observations, "CURRENCY"), 汇率值 = as.numeric(xml_attr(observations, "OBS_VALUE")), 系列ID = xml_attr(observations, "SERIES_KEY") ) # 查看前几行数据 head(exchange_rate_data)
注意事项
- 若XML结构有变动,可通过
xml_structure(d)查看完整节点结构,调整节点路径或属性名称。 - 提取的汇率值默认是字符型,需转换为数值型才能进行后续计算。
- 可使用
dplyr的filter()函数筛选特定日期范围或货币类型的数据。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

