首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Google专利复制XML解析

为Google专利复制XML解析
EN

Stack Overflow用户
提问于 2015-05-15 22:44:14
回答 1查看 219关注 0票数 0

我正在关注Parseing XML by R always return XML declaration error的答案

代码语言:javascript
复制
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),它的工作方式似乎是,当我提交以下内容时,我可以有选择地选择单个专利:

代码语言:javascript
复制
 sapply(docs, function(doc) xmlValue(doc["//invention-title"][[1]]))
 [1] NA NA NA NA NA

它没有像答案中那样返回发明标题的列表,而是给了我五个NA,任何帮助都将不胜感激。

如果我提供以下命令:docs[[2]]

它输出列表中第二个专利的全部内容。我想提取的相关信息如下所示:

代码语言:javascript
复制
<invention-title id="d2e73">Dress/coat</invention-title>

“连衣裙/外套”是五个NA中的一个

EN

回答 1

Stack Overflow用户

发布于 2015-09-19 08:43:18

如果您查看解压后的文件,您将看到它从第1行通常的XML声明开始:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v44-2013-05-16.dtd" [ ]>

代码语言:javascript
复制
<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文件实际上是一系列格式良好的文件,一个接一个地连接在一起:

代码语言:javascript
复制
<?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“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30262417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档