Date Редакция Категория comp Теги R / XML

Дана таблица df:

df <- data.frame(isbn=character(0),
                 user=character(0), 
                 text=character(0), 
                 rating=character(0),
                 date=character(0),
                 link=character(0),
                 stringsAsFactors=FALSE)

которую нужно сохранить в XML-файле следующей структуры:

<document>
  <row>
   <isbn>978-5-98034-642-1</isbn>
   <user>soul_in_shell</user>
   <text>Книга совершенно не оправдывает свое название. Это скорее брошюра в которой написано обо всём понемногу. Не понравилась</text>
   <rating>7.25 из 10</rating>
   <date>14.01.2014 20:39:51</date>
   <link>http://www.magazin.ru/reviews/0001/</link>
  </row>
  <row>
   <isbn>978-4-52174-168-1</isbn>
    ...
   <link>http://www.magazin.ru/reviews/0002/</link>
  </row>
</document> 

Воспользуемся функциями пакета XML. Создадим пустое дерево при помощи xmlTree() и добавим в него корневой элемент document (точнее, его открывающий тег). Затем для каждой строки таблицы будем создавать элементы row, внутрь которых поместим элементы isbn, user или другие, названия которых берутся из имён колонок таблицы. Не забудем и про закрывающие теги closeTag().

Полученный документ XML сохраним в виде строки функцией saveXML, а строку, в свою очередь, запишем в файл. Указывать кодировку документа (encoding = "UTF-8") принципиально важно, если в документе содержится "нелатиница".

library(XML)

xml <- xmlTree()
xml$addTag("document", close=FALSE)
for (i in 1:nrow(df)) {
  xml$addTag("row", close=FALSE)
  for (j in names(df)) {
    xml$addTag(j, df[i, j])
  }
  xml$closeTag()
}
xml$closeTag()

# save the result
cat(saveXML(xml, encoding = "UTF-8"), file="df.xml")


Комментарии

comments powered by Disqus