XML-пакет R выдает ошибку в правильном XML-документе

Я должен анализировать многие XML-документы с помощью программного обеспечения R, используя пакет XML (Duncan Temple Lang, 2013). Вот пример: http://musicbrainz.org/ws/2/release?query=%22A%20Is%20for%20Alpine%22%20AND%20artist:%22Alpine%22

Если ссылка копипастится в адресную строку браузера, отображается XML-страница, корректность которой проверяется одним из множества онлайн-валидаторов. Был выбран https://stackoverflow.com/questions/4423057/validation-problem-with-xml-declaration и разметка 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

Теперь ошибка аналогична обсуждаемой здесь Проблема проверки с объявлением XML, но не вижу, как ошибка относится к документу XML, который я хотел бы проанализировать.

Программное обеспечение: R версия 3.0.2 (25 сентября 2013 г.) -- "Frisbee Sailing"

Платформа: x86_64-unknown-linux-gnu (64-разрядная версия)

Пакет XML версии 3.98-1.1


person Fabio    schedule 17.12.2013    source источник


Ответы (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"
person Thomas    schedule 17.12.2013
comment
теперь это работает как шарм. Мне не хватало смысла использовать RCurl. Всегда ли нужен RCurl для использования XML? В любом случае, я бы проголосовал за ваш ответ, но у меня все еще недостаточно репутации. - person Fabio; 17.12.2013
comment
Я понятия не имею, почему вы получаете ошибку в этом случае, но я думаю, что всегда удобнее использовать RCurl для загрузки, потому что это позволяет вам легче отделить проблемы HTTP от проблем синтаксического анализа XML. - person Thomas; 17.12.2013
comment
Так и должно быть. RCurl + XML — это решение моей проблемы. - person Fabio; 17.12.2013