如何将 xml 文件转换为 R 数据框

How to convert a xml file to a R data frame

我想将以下 xml 文件转换为 R 数据框 (https://www.dropbox.com/s/wwejpr0nfcj6gnw/20130919_20130920_SLD_FCST_ACTUAL_20210507_15_57_58_v1.xml?dl=1)

我曾尝试使用 XML 包和 xml2 包,但没有成功。我是 xml 的新手,希望得到任何帮助。

在 XML 包中,我尝试了 xmlParse 和 xmlToDataFrame。在 xml2 包中,我尝试了 read_xml 和 xml_find_all 函数,其中 none 有效。

更新:以下Onyambu提供的解决方案对我有效,但如果其他社区成员有其他解决此问题的方法,请随时提供其他解决方案。

我建议您将 XML 文件转换为 CVS 文件(您可以在 excel 中执行此操作),然后使用命令 read.csv().

一种方法是:

a <- 'https://www.dropbox.com/s/wwejpr0nfcj6gnw/20130919_20130920_SLD_FCST_ACTUAL_20210507_15_57_58_v1.xml?dl=1'

library(purrr)
library(rvest)

h <- c("data_item", "resource_name", "opr_date", "interval_num", 
       "interval_start_gmt", "interval_end_gmt", "value")

read_html(a) %>%
  html_nodes("rto report_item")%>%
  map_dfr(~map_dfc(setNames(h, h), 
               ~html_text(html_nodes(.y, .x)), .y = .x), .id = "grp")

 A tibble: 120 x 8
   grp   data_item  resource_name opr_date interval_num interval_start_~ interval_end_gmt value
   <chr> <chr>      <chr>         <chr>    <chr>        <chr>            <chr>            <chr>
 1 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 7            2013-09-19T13:0~ 2013-09-19T14:0~ 20425
 2 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 24           2013-09-20T06:0~ 2013-09-20T07:0~ 20424
 3 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 12           2013-09-19T18:0~ 2013-09-19T19:0~ 20425
 4 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 14           2013-09-19T20:0~ 2013-09-19T21:0~ 20425
 5 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 18           2013-09-20T00:0~ 2013-09-20T01:0~ 20458
 6 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 19           2013-09-20T01:0~ 2013-09-20T02:0~ 20454
 7 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 21           2013-09-20T03:0~ 2013-09-20T04:0~ 20443
 8 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 23           2013-09-20T05:0~ 2013-09-20T06:0~ 20430
 9 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 4            2013-09-19T10:0~ 2013-09-19T11:0~ 20425
10 1     SYS_FCST_~ CA ISO-TAC    2013-09~ 5            2013-09-19T11:0~ 2013-09-19T12:0~ 20425
# ... with 110 more rows