2015-02-23 28 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更容易處理。他們還提供了一些很酷的高級搜索和分析功能,如果你想獲得幻想。

他們現在仍處於測試階段,但我認爲他們正在積極接受新的測試版用戶。一探究竟。