将XML解析为R

将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

我想从中提取汇率以转换我的本地货币数据。然而,我在使用xpath方面遇到了很多困难(尽管对我帮助很大)

库(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
## ..      ...      ...