我正在关注Parseing XML by R always return XML declaration error的答案
lines <- readLines("ipg140722.xml")
start <- grep('<?xml version="1.0" encoding="UTF-8"?>',lines,fixed=T)
end <- c(start[-1]-1,length(lines))
library(XML)
get.xml <- function(i) {
txt <- paste(lines[start[i]:end[i]],collapse="\n")
# print(i)
xmlTreeParse(txt,asText=T)
# return(i)
}
docs <- lapply(1:5,get.xml)
class(docs[[1]])代码解析来自谷歌专利的XML文件(文件是here),它的工作方式似乎是,当我提交以下内容时,我可以有选择地选择单个专利:
sapply(docs, function(doc) xmlValue(doc["//invention-title"][[1]]))
[1] NA NA NA NA NA它没有像答案中那样返回发明标题的列表,而是给了我五个NA,任何帮助都将不胜感激。
如果我提供以下命令:docs[[2]]
它输出列表中第二个专利的全部内容。我想提取的相关信息如下所示:
<invention-title id="d2e73">Dress/coat</invention-title>“连衣裙/外套”是五个NA中的一个
发布于 2015-09-19 08:43:18
如果您查看解压后的文件,您将看到它从第1行通常的XML声明开始:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v44-2013-05-16.dtd" [ ]><us-patent-grant lang="EN" dtd-version="v4.4 2013-05-16" file="USD0709266-20140722.XML" status="PRODUCTION" id="us-patent-grant" country="US" date-produced="20140707" date-publ="20140722">
[a few hundred lines omitted]
</us-patent-grant>但是,ipg140722.xml文件实际上是一系列格式良好的文件,一个接一个地连接在一起:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v44-2013-05-16.dtd" [ ]>
<us-patent-grant lang="EN" dtd-version="v4.4 2013-05-16" file="USD0709266-20140722.XML" status="PRODUCTION" id="us-patent-grant" country="US" date-produced="20140707" date-publ="20140722">
[a few hundred lines omitted]
</us-patent-grant>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v44-2013-05-16.dtd" [ ]>
<us-patent-grant lang="EN" dtd-version="v4.4 2013-05-16" file="USD0709267-20140722.XML" status="PRODUCTION" id="us-patent-grant" country="US" date-produced="20140707" date-publ="20140722">
[a few hundred lines omitted]
</us-patent-grant>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v44-2013-05-16.dtd" [ ]>
<us-patent-grant lang="EN" dtd-version="v4.4 2013-05-16" file="USD0709268-20140722.XML" status="PRODUCTION" id="us-patent-grant" country="US" date-produced="20140707" date-publ="20140722">
[a few hundred lines omitted]
</us-patent-grant>
(etc)由此产生的连接不是格式良好的XML,这大概就是R阻塞的原因。
如果查看一下,您将看到594、1041、1555等行上的新XML声明一直贯穿到文件的末尾。如果将第1-593、594-1040或1041-1554行粘贴到XML语法检查器中,例如http://www.w3schools.com/xml/xml_validator.asp中的语法检查器,它将报告"No errors found“。
https://stackoverflow.com/questions/30262417
复制相似问题