使用xml2包读取远程.gz格式XML文件报错及解决方案咨询
解决xml2直接读取远程gz压缩XML文件的报错问题
你遇到的问题大概率是xml2的read_xml在自动处理远程gz压缩流时的兼容性问题——虽然文档说明支持直接读gz文件,但实际远程传输的响应格式或连接特性可能导致它无法正确识别并解压内容。
试试下面两种手动处理连接和解压的方法,能绕过这个问题:
方法1:用httr获取二进制内容后解压读取
library(xml2) library(httr) # 发送GET请求获取原始二进制内容,设置10分钟超时适配大文件传输 resp <- GET("https://ftp.ncbi.nlm.nih.gov/pub/GTR/data/gtr_ftp.xml.gz", timeout(600)) # 将原始内容转为连接,用gzcon完成解压 xml_conn <- gzcon(rawConnection(content(resp, "raw"))) # 读取XML内容 x <- read_xml(xml_conn) # 关闭连接释放系统资源 close(xml_conn)
方法2:用curl建立可靠连接后解压读取
library(xml2) library(curl) # 创建curl连接,启用重定向跟随、设置10分钟超时 curl_conn <- curl("https://ftp.ncbi.nlm.nih.gov/pub/GTR/data/gtr_ftp.xml.gz", handle = new_handle(followlocation = TRUE, timeout_ms = 600000)) # 用gzcon解压连接流 xml_conn <- gzcon(curl_conn) # 读取XML内容 x <- read_xml(xml_conn) # 关闭连接 close(xml_conn)
额外排查建议
- 如果仍报错,先测试网络稳定性:用
download.file下载一个小型gz文件,确认能正常获取和解压 - 若遇到超时,继续增加超时参数的值,2GB压缩文件的传输需要充足的时间窗口
内容的提问来源于stack exchange,提问作者LMc
相关产品推荐
相关产品推荐

