将没有.xml扩展名的xml文件读入R中

时间:2014-08-01 12:54:49

标签: xml r

我在将xml文件读入R时遇到问题。问题是,此xml文件没有.xml扩展名。

我通常会遵循下面描述的方法:

library(XML)

xml.url <- "http://www.w3schools.com/xml/plant_catalog.xml"

使用xmlTreeParse和readLines函数来解析xml文件:

xmlfile <- xmlTreeParse(readLines(xml.url))

但是,我不知道如何从下面的网页解析内容。它没有.xml扩展名。

my_file <- 
  paste0("http://ec.europa.eu/public_opinion/cf/",
         "exp_feed.cfm?keyID=1&nationID=",
         "11,1,27,28,17,2,16,18,13,32,6,3,4,",
         "22,33,7,8,20,21,9,23,31,34,24,12,19,",
         "35,29,26,25,5,14,10,30,15,",
         "&startdate=1973.09&enddate=",
         "2014.06")

my_xml_file <- xmlTreeParse(readLines(my_file))

我收到此错误:

Input is not proper UTF-8, indicate encoding !
Bytes: 0xE7 0x6F 0x6E 0x20
Error: 1: Input is not proper UTF-8, indicate encoding !
Bytes: 0xE7 0x6F 0x6E 0x20

因此,网页没有扩展名,解析会抛出与编码相关的错误。我在上面的函数中尝试使用编码参数运气...没有运气。

2 个答案:

答案 0 :(得分:0)

首先尝试使用 httr 将其转换为R,然后让content函数将其吐出为更有用的格式:

library('httr')
my_file <- 
  paste0("http://ec.europa.eu/public_opinion/cf/",
         "exp_feed.cfm?keyID=1&nationID=",
         "11,1,27,28,17,2,16,18,13,32,6,3,4,",
         "22,33,7,8,20,21,9,23,31,34,24,12,19,",
         "35,29,26,25,5,14,10,30,15,",
         "&startdate=1973.09&enddate=",
         "2014.06")
x <- GET(my_file)
z <- xmlToList(content(x))

结果:

> str(z, 3)
List of 1
 $ Table:List of 2
  ..$ Grid       :List of 35
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2
  .. ..$ AxisZ:List of 2

答案 1 :(得分:0)

这与缺少xml延期相关。这并不重要。

问题似乎与文件的编码有关。这个地区似乎很有趣:

xx <- readLines(my_file); 
xx[114633:114646]

XML解析器不相信这是正确的UTF-8编码

您可以使用

转换R中的数据
yy <- iconv(ll, to="UTF-8")
my_xml_file <- xmlTreeParse(yy)

注意:这将取出坏字节的行。这意味着您将丢失数据。丢失的行是

which(is.na(yy))
# [1] 114637 114643 114685 114755 114776 114832 
# [7] 114881 114895 114902 115422 115429 115436

所以和

一样
my_xml_file <- xmlTreeParse(xx[-which(is.na(yy))])

幸运的是,您的文件仍在解析而没有丢失的行。