After not getting along so well with XML Starlet, came across xml-coreutils
The aim is to make XML processing for shell users exactly as easy as text processing.
xml-cat(1) concatenate XML files and print XML on the standard output.
xml-cp(1) copy nodes from XML files into an XML file.
xml-cut(1) print selected parts of an XML file as an XML file.
xml-echo(1) generate an XML file on the standard output.
xml-file(1) determine type of XML files.
xml-find(1) search for nodes in XML files and execute actions.
xml-fixtags(1) convert HTML into XML on the standard output.
xml-fmt(1) reformat an XML file, writing to the standard output.
xml-grep(1) print matching fragments as an XML file on the standard output.
xml-head(1) truncate the parts of an XML document.
xml-less(1) interactively display an XML file on a terminal.
xml-ls(1) list the contents of an XML file.
xml-mv(1) move nodes from XML files to an XML file or the standard output.
xml-printf(1) format and print data in an XML file to the standard output.
xml-rm(1) remove nodes from XML files.
xml-sed(1) stream editor for filtering and transforming an XML file.
xml-strings(1) print the strings of data in an XML file to the standard output.
xml-unecho(1) ungenerate an XML file into an xml-echo(1) expression.
xml-wc(1) print height, depth and number of tags for each XML file.
seems to be a decent introduction -- it seemed to touch on most (if not all) of the aforementioned.Caveat:
This project is still at an early stage, and is not ready for production use. However, it is usable today for simple tasks, and you can try it out right now by clicking one of the download buttons on the left.