我想从
ECB website中提取汇率以转换我的本地货币数据.但是,我在使用xpath时遇到了很多困难(尽管
this对我帮助很大).
library(XML) fileURL <- "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?93aad09b8f8b7bdb69cd1574b5b2665f" download.file(fileURL,destfile=tf <- tempfile(fileext=".xml")) xml_file <- xmlParse(tf) xml_data <- xmlRoot(xml_file) currency <- xml_data[["number(//Cube/@currency)"]] rate <- xml_data[["number(//Cube/@rate)"]]
然后我只想创建简单的数据框:
df <- data.frame(currency,rate)
解决方法
1)xpathSApply以下行给出了带货币和费率列的字符矩阵:
m <- t(xpathSApply(xml_data,"//*[@rate]",xmlAttrs))
如果需要以带有字符和数字列的数据框的形式添加:
read.table(text = paste(m[,1],m[,2]),as.is = TRUE)
注意:我们避免在XPath表达式中使用*来处理命名空间,但是如果需要明确引用Cube,就像在问题中一样,那么它将如下所示:
m <- xpathSApply(xml_data,"//x:Cube[@rate]",xmlAttrs,namespaces = "x")
2)read.pattern另一种方法是使用gsubfn中的read.pattern解析XML文件. (这不使用XML包.)
library(gsubfn) read.pattern(tf,pattern = "'(...)' rate='([0-9.]+)'",col.names = c("currency","rate"))