在R中读取XML文件会导致循环崩溃

时间:2019-03-25 11:41:55

标签: r xml encoding xml2

我有一个循环遍历xml文件列表并处理它们的代码。当我为单个xml执行代码时,结果就是预期的结果。但是,当我开始循环时,不同文件中会出现意外错误。错误的文件在每次迭代中都会更改,因此没有可用于发现错误的模式。

例如单个文件:

p_xml <- function(file)
{
   tmp<-tryCatch(
  {
    (read_xml(path_XML))
  },error=function(e)
  {
    return(NA)
   })

 if(is.na(tmp))
   {
    file <- read_xml(path_XML, encoding = "ISO-8859-1")
  }else{
   file <- tmp
 }
 id <- as.numeric(xml_attr(file, "id"))
 year_id <- as.numeric(xml_attr(file, "machine_year"))

....

return(data)

}

此代码以正确的方式返回data.table。但是,如果我在循环中执行此功能:

global_dt<-data.table()
for(j in 1:length(file_names))
  {
    current_file <- file_names[j]
    f <- p_xml(file.path(current_dir,current_file))
    global_dt<-rbind(global_dt,f)
  }

我收到这样的错误:

  
      
  • doc_parse_file中的错误(con,编码=编码,as_html = as_html,选项=选项):无法解析/path/file.xml   *
  •   

事实是,如果我随后对失败的文件执行单个代码,它将返回我期望的结果。 我使用xml2库来读取文件

1 个答案:

答案 0 :(得分:0)

尝试此工作流程

library(data.table)
#store the result of each run of the function into a list
l <- lapply( list_files, p_xml )
#rowbind the list together into one data.table
global_dt <- data.table::rbindlist( l )