Xml in R Programming Language
Our example demonstrates how to work with XML in R using the xml2
package. We’ll create a structure to represent plants, marshal it to XML, and then unmarshal it back.
First, let’s install and load the required package:
install.packages("xml2")
library(xml2)
Now, let’s define our Plant structure and a function to create it:
create_plant <- function(id, name, origin) {
list(
id = id,
name = name,
origin = origin
)
}
plant_to_string <- function(plant) {
sprintf("Plant id=%d, name=%s, origin=%s",
plant$id, plant$name, paste(plant$origin, collapse = ", "))
}
Let’s create a coffee plant and convert it to XML:
coffee <- create_plant(27, "Coffee", c("Ethiopia", "Brazil"))
# Convert to XML
coffee_xml <- xml_new_root("plant")
xml_set_attr(coffee_xml, "id", coffee$id)
xml_add_child(coffee_xml, "name", coffee$name)
for (origin in coffee$origin) {
xml_add_child(coffee_xml, "origin", origin)
}
# Print the XML
cat(as.character(coffee_xml))
To add a generic XML header:
cat(paste('<?xml version="1.0" encoding="UTF-8"?>\n', as.character(coffee_xml)))
Now, let’s parse the XML back into our structure:
parsed_plant <- list(
id = as.integer(xml_attr(coffee_xml, "id")),
name = xml_text(xml_find_first(coffee_xml, "name")),
origin = xml_text(xml_find_all(coffee_xml, "origin"))
)
cat(plant_to_string(parsed_plant))
Let’s create a tomato plant and demonstrate nesting:
tomato <- create_plant(81, "Tomato", c("Mexico", "California"))
nesting <- xml_new_root("nesting")
parent <- xml_add_child(nesting, "parent")
child <- xml_add_child(parent, "child")
for (plant in list(coffee, tomato)) {
plant_xml <- xml_add_child(child, "plant")
xml_set_attr(plant_xml, "id", plant$id)
xml_add_child(plant_xml, "name", plant$name)
for (origin in plant$origin) {
xml_add_child(plant_xml, "origin", origin)
}
}
cat(as.character(nesting))
This example demonstrates basic XML operations in R. The xml2
package provides a powerful set of tools for working with XML, including creation, parsing, and manipulation of XML documents.
To run this R script, save it to a file (e.g., xml_example.R
) and execute it using the R interpreter:
$ Rscript xml_example.R
This will output the XML representations and the parsed plant information.