2013-12-17 54 views
0

我應該使用R軟件使用XML包解析許多XML文檔(Duncan Temple Lang,2013)。下面是一個例子:http://musicbrainz.org/ws/2/release?query=%22A%20Is%20for%20Alpine%22%20AND%20artist:%22Alpine%22R的XML包在正確的XML文檔上拋出錯誤

如果鏈接被複制粘貼到瀏覽器的地址欄中,將顯示一個XML頁面,並使用其中一個在線驗證器檢查其正確性。 http://validator.w3.org已被選中,XML文檔的標記似乎有效。

但是使用此代碼:報道

library(XML) 
url = "http://musicbrainz.org/ws/2/release?query=%22A%20Is%20for%20Alpine%22%20AND%20artist:%22Alpine%22" 
data = xmlTreeParse(url, asTree = TRUE) 

以下錯誤:

Blank needed here 
Error: 1: Blank needed here 

現在,錯誤類似於這裏討論Validation problem with XML declaration的一個,但不能看到錯誤適用於我要解析的XML文檔。

軟件: - [R 3.0.2版(2013年9月25日) - 「飛盤風帆」

平臺:x86_64的未知-Linux的GNU(64位)

XML包版本3.98-1.1

回答

1

下載首先使用RCurl的文件,那麼你應該沒有問題:

library(RCurl) 
u <- getURL(url) 

> xmlTreeParse(u, asTree=TRUE) 
$doc 
$file 
[1] "<buffer>" 

$version 
[1] "1.0" 

$children 
$children$metadata 
<metadata created="2013-12-17T04:49:41.807Z" xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0"> 
<release-list count="1" offset="0"> 
    <release id="d1e75e7b-fe4a-4cd6-b0d9-8ccf04a62406" score="100"> 
    <title>A Is for Alpine by Alpine</title> 
    <status>Official</status> 
    <text-representation> 
    <language>eng</language> 
    <script>Latn</script> 
    </text-representation> 
    <artist-credit> 
    <name-credit> 
    <artist id="d7f0c2fe-00fb-4248-995a-dbfd5a87331a"> 
     <name>Alpine</name> 
     <sort-name>Alpine</sort-name> 
    </artist> 
    </name-credit> 
    </artist-credit> 
    <release-group id="7ea67d40-8819-4059-a9be-e1115cdf0ddb" type="Album"> 
    <primary-type>Album</primary-type> 
    </release-group> 
    <date>2012-08-10</date> 
    <country>AU</country> 
    <release-event-list> 
    <release-event> 
    <date>2012-08-10</date> 
    <area id="106e0bec-b638-3b37-b731-f53d507dc00e"> 
     <name>Australia</name> 
     <sort-name>Australia</sort-name> 
     <iso-3166-1-code-list> 
     <iso-3166-1-code>AU</iso-3166-1-code> 
     </iso-3166-1-code-list> 
    </area> 
    </release-event> 
    </release-event-list> 
    <label-info-list> 
    <label-info> 
    <catalog-number>IVY166</catalog-number> 
    <label id="96e57a7b-c481-41e5-a0d4-111604210207"> 
     <name>Ivy League Records</name> 
    </label> 
    </label-info> 
    </label-info-list> 
    <medium-list count="1"> 
    <track-count>12</track-count> 
    <medium> 
    <format>CD</format> 
    <disc-list count="1"/> 
    <track-list count="12"/> 
    </medium> 
    </medium-list> 
    </release> 
</release-list> 
</metadata> 


attr(,"class") 
[1] "XMLDocumentContent" 

$dtd 
$external 
NULL 

$internal 
NULL 

attr(,"class") 
[1] "DTDList" 

attr(,"class") 
[1] "XMLDocument"   "XMLAbstractDocument" 
+0

現在,它就像一個魅力。我錯過了使用RCurl的觀點。爲了使用XML,總是需要RCurl嗎?無論如何,我會投你的答案,但我仍然沒有足夠的聲譽。 – Fabio

+0

我不知道爲什麼你會在這種情況下得到錯誤,但我認爲使用RCurl下載會更方便,因爲它允許你更容易地將HTTP問題從XML解析問題中分離出來。 – Thomas

+0

它必須如此。 RCurl + XML是我的問題的解決方案。 – Fabio