2016-02-05 3 views
3

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

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 (ДФ) структура (список (страница = с ("Page One", "Page Два"), base64 = с ("Very Long String thats base64 character ", " Very Long String - это символ base64 ")) .Names = c (" page ", " 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 

ответ

6

Что касается this answer, я бы

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> 
+0

Когда я запускаю этот код я получить только "" ??? – Nodedeveloper101

+0

Странно. Мой 'packageVersion (" XML ")' is '3.98.1.3' - работает здесь. – lukeA

+0

Я перезапустил R, и это сработало, спасибо – Nodedeveloper101

Смежные вопросы