Today we are pleased to release version 1.1.1 of xml2. xml2 makes it easy to read, create, and modify XML with R. You can install it with:
install.packages("xml2")
As well as fixing many bugs, this release:
You can see a full list of changes in the release notes. This is the first release maintained by Jim Hester.
xml2 has been overhauled with a set of methods to make generating and modfying XML easier:
xml_new_root()
can be used to create a new document and root node simultaneously.
xml_new_root("x") %>% xml_add_child("y") %>% xml_root() #> {xml_document} #> <x> #> [1] <y/>
New xml_set_text()
, xml_set_name()
, xml_set_attr()
, and xml_set_attrs()
make it easy to modify nodes within a pipeline.
x <- read_xml("<a> <b /> <c><b/></c> </a>") x #> {xml_document} #> <a> #> [1] <b/> #> [2] <c>\n <b/>\n</c> x %>% xml_find_all(".//b") %>% xml_set_name("banana") %>% xml_set_attr("oldname", "b") x #> {xml_document} #> <a> #> [1] <banana oldname="b"/> #> [2] <c>\n <banana oldname="b"/>\n</c>
New xml_add_parent()
makes it easy to insert a node as the parent of an existing node.
You can create more esoteric node types with xml_comment()
(comments), xml_cdata()
(CDATA nodes), and xml_dtd()
(DTDs).
xml2 1.1.1 improves support for converting to and from R lists, thanks in part to work by Peter Foley and Jenny Bryan. In particular xml2 now supports preserving the root node name as well as saving all xml2 attributes as R attributes. These changes allows you to convert most XML documents to and from R lists with as_list()
and as_xml_document()
without loss of data.
x <- read_xml("<fruits><apple color = 'red' /></fruits>") x #> {xml_document} #> <fruits> #> [1] <apple color="red"/> as_list(x) #> $fruits #> $fruits$apple #> list() #> attr(,"color") #> [1] "red" as_xml_document(as_list(x)) #> {xml_document} #> <fruits> #> [1] <apple color="red"/>
xml2 1.1.1 also adds support for XML validation, thanks to Jeroen Ooms. Simply read the document and schema files and call xml_validate()
.
doc <- read_xml(system.file("extdata/order-doc.xml", package = "xml2")) schema <- read_xml(system.file("extdata/order-schema.xml", package = "xml2")) xml_validate(doc, schema) #> [1] TRUE #> attr(,"errors") #> character(0)
Jeroen also released the first xml2 extension package in conjunction with xml2 1.1.1, xslt. xslt allows one to apply XSLT (Extensible Stylesheet Language Transformations) to XML documents, which are great for transforming XML data into other formats such as HTML.