Как преобразовать data.frame в файл xml с помощью R?

У меня есть простой data.frame с двумя переменными: title и base64. Мне нужно преобразовать этот data.frame в формат XML. Например, вот как выглядят мои данные ..

str(df)
     'data.frame':  2 obs. of  2 variables:
     $ title  : chr  "Page One" "Page Two"
     $ base64: chr  "Very Long String thats a base64 character" "Very Long String thats a base64 character"

Структура dput (df) (список (page = c ("Первая страница", "Вторая страница"), base64 = c ("Очень длинная строка, содержащая символ base64", "Очень длинная строка, содержащая символ base64")),. Names = c ("страница", "base64"), row.names = 1: 2, class = "data.frame")

Мне нужно вывести XML-файл в таком формате ...

<report type="enchanced">
    <pages>
        <page>
            <title>Page One</title>
            <page> *** long base64 string *** </page>
        </page>
        <page>
            <title>Page Two</title>
            <page> *** long base64 string *** </page>
        </page>
    </pages>
</report>

Я экспериментировал с пакетом XML в R и даже нашел эту функцию, которая, похоже, должна работать, но я не могу ее понять. Любая помощь приветствуется.

library(XML)
convertToXML <- function(df,name) {
  xml <- xmlTree("report")
  xml$addNode(name, close=FALSE)
  for (i in 1:nrow(df)) {
    xml$addNode("page", close=FALSE)
    for (j in names(df)) {
      xml$addNode(j, df[i, j])
    }
    xml$closeTag()
  }
  xml$closeTag()
  return(xml)
}

 tr = convertToXML(df,"pages") 
 cat(saveXML(tr$page())) ## suppose to looks good

r xml
person Nodedeveloper101    schedule 05.02.2016    source источник


Ответы (1)


Что касается этого ответа, я бы сделал

data<- structure(list(page = c("Page One", "Page Two"), base64 = c("Very Long String thats a base64 character", "Very Long String thats a base64 character")), .Names = c("page", "base64"), row.names = 1:2, class = "data.frame")
names(data) <- c("title", "page")

library(XML)
xml <- xmlTree()
# names(xml)
xml$addTag("report", close=FALSE, attrs=c(type="enhanced"))
xml$addTag("pages", close=FALSE)
for (i in 1:nrow(data)) {
    xml$addTag("page", close=FALSE)
    for (j in names(data)) {
        xml$addTag(j, data[i, j])
    }
    xml$closeTag()
}
xml$closeTag()
xml$closeTag()
cat(saveXML(xml))
# <?xml version="1.0"?>
# 
# <report type="enhanced">
#   <pages>
#     <page>
#       <title>Page One</title>
#       <page>Very Long String thats a base64 character</page>
#     </page>
#     <page>
#       <title>Page Two</title>
#       <page>Very Long String thats a base64 character</page>
#     </page>
#   </pages>
# </report>
person lukeA    schedule 05.02.2016
comment
Странный. Мой packageVersion("XML") - «3.98.1.3» - здесь работает. - person lukeA; 06.02.2016
comment
Перезагрузить с чистой R-сессией? - person lukeA; 06.02.2016
comment
Как мне экспортировать этот вывод в файл XML? @lukeA, nvm 'кошка (saveXML (xml, data.xml)' - person Nodedeveloper101; 06.02.2016
comment
Например saveXML(xml, file = tf <- tempfile(fileext = ".xml")) или cat(as(xml, "character"), file=tf <- tempfile(fileext = ".xml"), sep="\n")? - person lukeA; 06.02.2016