我在将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
因此,网页没有扩展名,解析会抛出与编码相关的错误。我在上面的函数中尝试使用编码参数运气...没有运气。
答案 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))])
幸运的是,您的文件仍在解析而没有丢失的行。