R\'s XML package has an xmlToList function, but does not have the reverse, is there a function for R that will convert a list to an XML object?
I would like somethin
Here is the listToXML function that we ended up creating
At first I adapted the answer by @Jeff
listToXml <- function(item, tag){
if(typeof(item)!='list')
return(xmlNode(tag, item))
xml <- xmlNode(tag)
for(name in names(item)){
xml <- append.xmlNode(xml, listToXml(item[[name]], name))
}
return(xml)
}
But since the function has benefited from further development:
##' Convert List to XML
##'
##' Can convert list or other object to an xml object using xmlNode
##' @title List to XML
##' @param item
##' @param tag xml tag
##' @return xmlNode
##' @export
##' @author David LeBauer, Carl Davidson, Rob Kooper
listToXml <- function(item, tag) {
# just a textnode, or empty node with attributes
if(typeof(item) != 'list') {
if (length(item) > 1) {
xml <- xmlNode(tag)
for (name in names(item)) {
xmlAttrs(xml)[[name]] <- item[[name]]
}
return(xml)
} else {
return(xmlNode(tag, item))
}
}
# create the node
if (identical(names(item), c("text", ".attrs"))) {
# special case a node with text and attributes
xml <- xmlNode(tag, item[['text']])
} else {
# node with child nodes
xml <- xmlNode(tag)
for(i in 1:length(item)) {
if (names(item)[i] != ".attrs") {
xml <- append.xmlNode(xml, listToXml(item[[i]], names(item)[i]))
}
}
}
# add attributes to node
attrs <- item[['.attrs']]
for (name in names(attrs)) {
xmlAttrs(xml)[[name]] <- attrs[[name]]
}
return(xml)
}