2016-05-18 15 views
0

これを解析しようとしていますが、いくつか問題があります。 は動作しませんでしたそのURLからそれを読んで以来、私は、ファイルをダウンロードし、ローカルコピー読み:010168412::MPEG21:MPEG21 XMLファイルの解析R

ns <- "http://www.openarchives.org/OAI/2.0/" 
file <- "ddd:010168412.xml" 

xml.content<- xmlTreeParse(file) 
xml.top <- xmlRoot(xml.content) 

を、私は必要なものの例DDDのために(すべてのIDのために抽出することであるA0003 )例えば、それに属しているテキストブロックの

<didl:Component dc:identifier="ddd:010168412:mpeg21:a0003:zoning"> 

のIDのように:たとえば、このための木作品から何かを抽出するために私の試みのどれも、しかし

<dcx:TextBlock ID="P1_TB00019"/> 
<dcx:TextBlock ID="P1_TB00020"/> 
<dcx:TextBlock ID="P1_TB00021"/> 
<dcx:TextBlock ID="P1_TB00022"/> 
<dcx:TextBlock ID="P1_TB00023"/> 

エラーを返さずに何も返しません:

x <- sapply(getNodeSet(xml.top, "//responseDate"), xmlValue) 

私は本当に基本的なものを見落としているという印象を受けています。何か案が?

答えて

0

それが原因特別なエイリアスxmlnsはコロンで示さ接頭辞がないXML文書のルートタグで宣言されていない名前空間にある。その結果

xmlns="http://www.openarchives.org/OAI/2.0/" 

を、あなたがに接頭辞を宣言する必要があります名前空間とgetNodeSetおよび/またはxpathSApplyを含む各XPathの呼び出しでそれを使用すること:

namespaces <- c(ns="http://www.openarchives.org/OAI/2.0/") 

x <- sapply(getNodeSet(file, "//ns:responseDate", namespaces), xmlValue) 
x 
# [1] "2016-05-19T03:42:59.576Z" 

# ALTERNATIVE 
x <- xpathSApply(file, "//ns:responseDate", xmlValue, namespaces = namespaces) 
x 
# [1] "2016-05-19T03:42:59.576Z" 

ます。また、複数の名前空間を登録することができます。

namespaces <- c(ns="http://www.openarchives.org/OAI/2.0/", 
       dc="http://purl.org/dc/elements/1.1/", 
       dcx="http://krait.kb.nl/coop/tel/handbook/telterms.html") 

y <- xpathSApply(file, "//dcx:TextBlock", xmlGetAttr, "ID", 
       namespaces = namespaces) 
head(y) 
# [1] "P1_TB00012" "P1_TB00013" "P1_TB00014" "P1_TB00015" "P1_TB00016" 
# [6] "P1_TB00017"