Skip to content


MIT 63 3 216
624.5 thousand (month) Apr 20 2015 1.3.6(9 months ago)
3,539 6 27 MIT
7.1.2(8 months ago) Jul 03 2013 173.6 million (month)

The xml2 package is a binding to libxml2, making it easy to work with HTML and XML from R. The API is somewhat inspired by jQuery.

xml2 can be used to parse HTML documents using XPath selectors and is a successor to R's XML package with a few improvements:

  • xml2 takes care of memory management for you. It will automatically free the memory used by an XML document as soon as the last reference to it goes away.
  • xml2 has a very simple class hierarchy so don't need to think about exactly what type of object you have, xml2 will just do the right thing.
  • More convenient handling of namespaces in Xpath expressions - see xml_ns() and xml_ns_strip() to get started.

parse5 is a Node.js library for parsing and manipulating HTML and XML documents. It is designed to be fast and flexible, and it is commonly used in web scraping and web development projects.

parse5 is used by popular libraries such as Angular, Lit, Cheerio and many more. Unlike Cheerio parse5 is a low level html parsing library that might be useful directly in web scraping without higher level abstraction.

Example Use

x <- read_xml("<foo> <bar> text <baz/> </bar> </foo>")

xml_find_all(x, ".//baz")

h <- read_html("<html><p>Hi <b>!")
const parse5 = require("parse5");

// parse string
const document = parse5.parse('<html><body>Hello World!</body></html>');

// html tree can be traversed as javascript object:
const body = document.childNodes[1];
console.log(body.childNodes[0].value); // "Hello World!"

// and modified
const newElement = parse5.parseFragment('<p>New Element</p>');

Alternatives / Similar