删除xml文件R中的特殊字符

时间:2018-02-09 11:22:55

标签: r xml xml-parsing

我有几千个xml文件,我想读入R.问题是这些文件中有一些在文件开头有三个特殊字符“”,它阻止xmlTreeParse读取xml文件。我得到的错误如下......

Error: 1: Start tag expected, '<' not found

这是由于xml文件中的第一行是以下内容...

<?xml version="1.0" encoding="utf-8"?>

如果我使用记事本手动删除字符,我在xml文件的开头有这个,我能够读取xml文件......

<?xml version="1.0" encoding="utf-8"?>

我希望能够自动删除这些字符。以下是我目前编写的代码。

filenames <- list.files("...filepath...", pattern="*.xml", full.names=TRUE)

files <- lapply(filenames, function(f) {
  xmlfile <-tryCatch(xmlTreeParse(file = f), error=function(e) print(f))
  xmltop <- xmlRoot(xmlfile)
  plantcat <- xmlSApply(xmltop, function(x) xmlSApply(x, xmlValue))
  name <- unname(plantcat$EntityNames)
  return(name)
})

我想知道如何通过删除R中的特殊字符来读取xml文件。我已经尝试过tryCatch,如上所示,但我不确定如何编辑xml文件而不是先实际读取它。任何帮助将不胜感激!

编辑:使用以下解析代码修复了问题。我想当我在记事本中打开xml文件时,它显示“”但实际上它是以下字符串“”。这可能是由于文件的编码,但我不确定具体细节。谢谢@Prem。

xmlfile <- xmlTreeParse(gsub("","",readLines(f)), asText=TRUE)

3 个答案:

答案 0 :(得分:0)

您是否尝试过gsub功能?这是一个非常方便的字符替换(和删除)功能。这对我有用:

gsub ('','',string, fixed=TRUE)

string = '<?xml version="1.0" encoding="utf-8"?>'变量上。

编辑:如果您使用的是GNU / Linux计算机,我建议您使用sed功能。这是一个非常强大的工具,可以完美地完成这项任务。

答案 1 :(得分:0)

从一开始的特殊字符可能来自文件的不同编码,特别是如果您的xml包含一些特殊字符。

尝试指定编码。要确定使用的编码,请将文件打开为hexa并读取第一个字节。

我的预感是你的特殊字符来自BOM:
http://unicode.org/faq/utf_bom.html

答案 2 :(得分:0)

在您的代码中使用.nupkg来读取文件,然后readLines可用于从字符串中删除垃圾值。

gsub