读取XML文件以进行特殊字符解析时出错

时间:2015-12-07 19:55:33

标签: xml r

我目前正在阅读静态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>

我试图换掉&amp;代码:

install.packages("XML")
library(XML)

location <- "C:/Users/Desktop/temp"
filenames=dir(location)

for (i in 1:length(filenames)){
   tmp <- gsub("&", "&amp;", 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'

另外一项工作是更换&符号和/或任何关于为什么它读取最后一行不完整的想法以便我不会收到警告?

2 个答案:

答案 0 :(得分:0)

首先,XML需要&amp; 而不是&amp;根据 Section 4.6 Predefined Entities.of Extensible Markup Language (XML) 1.0 (Fifth Edition)

可在此处找到xml验证程序w3schools xml validator

<DATA>
     <NAME>BARNES &amp; NOBLE</NAME>
</DATA>

其次是变量DF。我不确定DF是否可以绑定到数据集,如果它是空的(第一次调用)?

这有效

两个相同的xml文件,如上所述,带有修复(如上所述)

for (i in 1:length(filenames)){ 
    data <- xmlParse(paste0(location,"/",filenames[i]))   
    TMP<-xmlToDataFrame(nodes=getNodeSet(data,"//DATA")) 
    if (i==1) {   
        DF<-TMP 
    } else { 
        DF<-rbind(TMP,DF) 
    } 
}

结果是

 str(DF)
'data.frame':   2 obs. of  1 variable:
 $ NAME: Factor w/ 1 level "BARNES & NOBLE": 1 1

我希望这就是你要找的东西?

一切顺利

答案 1 :(得分:0)

假设您可以预处理或修改数据,请尝试使用以下内容替换AzureWebJobsDashboard

&