2015-02-23 27 views
0

考虑下面的(准)欧洲专利局的专利服务器REPO的XML结构:选择xml_nodes

<ep-patent-document id="EP79301547B1" file="EP79301547NWB1.xml" lang="en" country="EP" doc-number="0007815" kind="B1" date-publ="19871021" status="n" dtd-version="ep-patent-document-v1-1"> 
<SDOBI lang="en"> 
<B000>...</B000> 
<B100>...</B100> 
<B200> 
<B210>79301547.0</B210> 
<B220> 
<date>19790801</date> 
</B220> 
<B240/> 
<B250>en</B250> 
<B251EP>en</B251EP> 
<B260>en</B260> 
</B200> 
<B300>...</B300> 
<B400>...</B400> 
<B500>...</B500> 
<B700>...</B700> 
<B800>...</B800> 
</SDOBI> 
<!-- EPO <DP n="1"> --> 
<!-- EPO <DP n="2"> --> 
<description id="desc" lang="en">...</description> 
<claims id="claims01" lang="en">...</claims> 
<claims id="claims02" lang="de">...</claims> 
<claims id="claims03" lang="fr">...</claims> 
</ep-patent-document> 

我想选择的数量节点“B210”和“说明”中的文字。

使用

library(httr) 
library(rvest) 
library(XML) 
library(magrittr) 

files1993 <- list.files("~/Downloads", full.names=TRUE, recursive=TRUE) 
y <- files1993[1] 
parse1993 <- htmlParse(y) 

parse1993 %>% xml_nodes("description") 
parse1993 %>% xml_nodes("SDOBI") %>% xml_nodes("B210") 

我得到的说明文字,但没有为B210。事实上,该命令不适用于任何信息。我是否必须将SDOBI中提供的信息转换为文本?我有点迷失在这里。任何帮助高度赞赏。

+0

为什么不使用'xmlParse'? ''parse1993%>%xml_nodes(“SDOBI”)%>%xml_nodes(“B210”)'正常工作,然后 – hrbrmstr 2015-02-23 14:29:25

+1

从Hadley尝试'xml2':'library(xml2); xml < - xml('... your.example ...'); xml_text(xml_find(xml,“// B210 | // description”));#[1]“79301547.0”“...”'。 – lukeA 2015-02-23 14:32:30

回答

0

我很抱歉,这个回应有点迟,但是想要反应,以防其他人需要关于这个话题的帮助。

首先,使用EPO API是一个巨大的痛苦。有xml是熊,数据可能很脏,不一致。

PatentData.io似乎是一个更好的选择。他们拥有EPO数据集,并通过现代RESTful JSON API进行清理和管理。 rjson更容易处理。他们还提供了一些很酷的高级搜索和分析功能,如果你想获得幻想。

他们现在仍处于测试阶段,但我认为他们正在积极接受新的测试版用户。一探究竟。