将XML解析为R
我想从中提取汇率以转换我的本地货币数据。然而,我在使用xpath方面遇到了很多困难(尽管对我帮助很大)将XML解析为R,xml,r,xpath,Xml,R,Xpath,我想从中提取汇率以转换我的本地货币数据。然而,我在使用xpath方面遇到了很多困难(尽管对我帮助很大) 库(XML) fileURL1)XPathApply以下行给出了一个字符矩阵m,其中包含货币和汇率列: m <- t(xpathSApply(xml_data, "//*[@rate]", xmlAttrs)) 注意:我们通过在XPath表达式中使用*避免了必须处理名称空间,但是如果希望像问题中那样显式地引用多维数据集,则可以这样做: m <- xpathSApply(xml_d
库(XML)
fileURL1)XPathApply以下行给出了一个字符矩阵m
,其中包含货币和汇率列:
m <- t(xpathSApply(xml_data, "//*[@rate]", xmlAttrs))
注意:我们通过在XPath表达式中使用*
避免了必须处理名称空间,但是如果希望像问题中那样显式地引用多维数据集
,则可以这样做:
m <- xpathSApply(xml_data, "//x:Cube[@rate]", xmlAttrs, namespaces = "x")
哈德利诗中G答案的替代版本:
library(xml2)
library(purrr)
library(readr)
fileURL <- "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?93aad09b8f8b7bdb69cd1574b5b2665f"
doc <- read_xml(fileURL)
dat <- type_convert(map_df(xml_attrs(xml_find_all(doc, "//*[@rate]")), as.list))
dat
## Source: local data frame [31 x 2]
##
## currency rate
## (chr) (dbl)
## 1 USD 1.0933
## 2 JPY 130.5800
## 3 BGN 1.9558
## 4 CZK 27.0250
## 5 DKK 7.4623
## 6 GBP 0.7533
## 7 HUF 310.5500
## 8 PLN 4.3982
## 9 RON 4.5093
## 10 SEK 9.3580
## .. ... ...
库(xml2)
图书馆(purrr)
图书馆(readr)
fileURL这也是一种非常酷的方法,可以避免名称空间的胡言乱语。看起来不错,两种方法都适合我。感谢您提供这两种解决方案!
read.table(text = paste(m[, 1], m[, 2]), as.is = TRUE)
m <- xpathSApply(xml_data, "//x:Cube[@rate]", xmlAttrs, namespaces = "x")
library(gsubfn)
read.pattern(tf, pattern = "'(...)' rate='([0-9.]+)'", col.names = c("currency", "rate"))
library(xml2)
library(purrr)
library(readr)
fileURL <- "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?93aad09b8f8b7bdb69cd1574b5b2665f"
doc <- read_xml(fileURL)
dat <- type_convert(map_df(xml_attrs(xml_find_all(doc, "//*[@rate]")), as.list))
dat
## Source: local data frame [31 x 2]
##
## currency rate
## (chr) (dbl)
## 1 USD 1.0933
## 2 JPY 130.5800
## 3 BGN 1.9558
## 4 CZK 27.0250
## 5 DKK 7.4623
## 6 GBP 0.7533
## 7 HUF 310.5500
## 8 PLN 4.3982
## 9 RON 4.5093
## 10 SEK 9.3580
## .. ... ...