\name{xmlSerializeHook} \alias{xmlSerializeHook} \alias{xmlDeserializeHook} \title{Functions that help serialize and deserialize XML internal objects} \description{ These functions can be used to control how the C-level data structures associated with XML documents, nodes, XPath queries, etc. are serialized to a a file or connection and deserialized back into an R session. Since these C-level data structures are represented in R as external pointers, they would normally be serialized and deserialized in a way that loses all the information about the contents of the memory being referenced. \code{xmlSerializeHook} arranges to serialize these pointers by saving the corresponding XML content as a string and also the class of the object. The deserialize function converts such objects back to their original form. These functions are used in calls to \code{\link{saveRDS}} and \code{\link{readRDS}} via the \code{refhook} argument. \code{ saveRDS(obj, filename, refhook = xmlSerializeHook) readRDS(filename, refhook = xmlDeserializeHook) } } \usage{ xmlSerializeHook(x) xmlDeserializeHook(x) } \arguments{ \item{x}{the object to be deserialized, and the character vector to be deserialized.} } \value{ \code{xmlSerializeHook} returns a character version of the XML document or node, along with the basic class. If it is called with an object that is not an native/internal XML object, it returns \code{NULL} \code{xmlDeserializeHook} returns the parsed XML object, either a document or a node. } \references{ The R Internals Manual. } \author{ Duncan Temple Lang } \seealso{ \code{\link{saveRDS}} and \code{\link{readRDS}} } \examples{ z = newXMLNode("foo") f = system.file("exampleData", "tides.xml", package = "XML") doc = xmlParse(f) hdoc = as(doc, "XMLHashTree") nodes = getNodeSet(doc, "//pred") ff <- file.path(tempdir(), "tmp.rda") saveRDS(list(a = 1:10, z = z, doc = doc, hdoc = hdoc, nodes = nodes), ff, refhook = xmlSerializeHook) v = readRDS(ff, refhook = xmlDeserializeHook) unlink(ff) } \keyword{IO}