【发布时间】:2015-12-07 19:55:32
【问题描述】:
我目前正在阅读一个包含静态 XML 文件(数千个)的文件夹。
其中大部分格式正确,但有一些特殊字符我想屏蔽。例如,一个 XML 文件的 XML 代码无效,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<INQUIRY version="4.0">
<AUTHENTICATION>
<LICENSEKEY>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</LICENSEKEY>
<PASSWORD>YYYYYYYYYYY</PASSWORD>
</AUTHENTICATION>
<QUERY>
<TRACKID>1-1-1</TRACKID>
<TYPE>VALID</TYPE>
<CHANNEL>INTERNET</CHANNEL>
<INQUIRYTYPE>O</INQUIRYTYPE>
<DATA>
<NAME>BARNES & NOBLE</NAME>
</DATA>
</QUERY>
</INQUIRY>
我尝试用代码替换 &:
install.packages("XML")
library(XML)
location <- "C:/Users/Desktop/temp"
filenames=dir(location)
for (i in 1:length(filenames)){
tmp <- gsub("&", "&", readLines(paste0(location,"/",filenames[i])))
data <- xmlParse(tmp)
TMP<-xmlToDataFrame(nodes=getNodeSet(data,"//DATA"))
DATAX_DF<-rbind(TMP,DATAX_DF)
}
结果如下:
Warning message:
In readLines(paste0(location, "/", filenames[i])) :
incomplete final line found on 'C:/Users/Desktop/tmp/1-1-1_req.XML'
还有什么办法可以替代 & 号和/或关于为什么它将最后一行读取为不完整以便我不会收到警告的任何想法?
【问题讨论】:
-
这是一个无效的 XML 文件。您可以使用validator 对其进行测试。该文件最初是如何生成的?
-
抱歉,我快速解析了 XML 以删除敏感信息。假设它是一个有效的 XML 文件。解决方法确实有效,它只是在不完整的最后一行引发警告。
-
我们不能仅仅假设它是有效的,因为你得到的错误清楚地表明它不是。如果您的 XML 文件有一个未转义的 & 符号,那么它不是一个有效的 XML 文件,它只是一个看起来像 XML 的文件。您应该首先弄清楚为什么以这种方式创建无效文件。关于最后一行不完整的消息只是一个警告。这只是意味着行尾没有换行符。这并不是真正的错误。