Cómo crear xml a partir de objetos R, por ejemplo, ¿hay una función ‘listToXml’?

El paquete XML de R tiene una función xmlToList, pero no tiene el reverso, ¿hay alguna función para R que convierta una lista en un objeto XML?

Me gustaría algo como

listToXML(list('a')) 

eso regresa

  

pero lo más cercano que puedo encontrar es

 library(XML) xmlNode(list('a')) 

que devuelve

  

ayuda en esta cuestión, y en general se aprecia la comprensión de la conversión de objetos R a XML (el paquete XML parece estar más centrado en el uso de R para leer XML, con menos soporte para la creación de XML).

Actualización … Una razón por la que no pude resolver esto es porque no me di cuenta de que el ‘/’ en ‘ posterior indica un nodo vacío, equivalente a

La función newXMLNode hace lo que necesita, es decir, escribe salida XML. Consulte la ayuda detallada y ejemplos en ?newXMLNode para obtener más detalles. Aquí hay un breve extracto:

 library(XML) top = newXMLNode("a") newXMLNode("b", attrs=c(x=1, y='abc'), parent=top) newXMLNode("c", "With some text", parent=top) top 

Resultando en:

   With some text  

Me sorprende que ya no exista ninguna función para esto; seguramente ya hay algo empaquetado.

De todos modos, uso la siguiente secuencia de comandos para lograr esto:

 root <- newXMLNode("root") li <- list(a = list(aa = 1, ab=2), b=list(ba = 1, bb= 2, bc =3)) listToXML <- function(node, sublist){ for(i in 1:length(sublist)){ child <- newXMLNode(names(sublist)[i], parent=node); if (typeof(sublist[[i]]) == "list"){ listToXML(child, sublist[[i]]) } else{ xmlValue(child) <- sublist[[i]] } } } listToXML(root, li) 

Puede usar la función XML :: saveXML () para tomar esto como un personaje, si lo prefiere.

Aquí está la función listToXML que terminamos creando

Al principio adapté la respuesta por @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) } 

Pero dado que la función se ha beneficiado de un mayor desarrollo :

 ##' 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) }