- Based on excellent libxml2 library
- Work with multiple DOM trees at once
- Filesystem-like navigation within the DOM tree using XPath
- XPath-based copy/move nodes within a DOM tree or between two DOM trees (with automatic node-type conversion, so that you may e.g. move text nodes into attributes or comments)
- Deleting nodes, creating nodes of any type (elements, attributes, text, cdata, comments, well-balanced XML chunks, and (experimentally) even entity reference)
- XPath-based search and XML listing
- Arbitrary XPath and Perl expression evaluation
- Conditional statements, while loop, Perl-like foreach loop
- Command outupt redirection using a unix pipe; for example, use
xsh> list //word | grep [A-Z] | less
to read a list all word elements containing letters A to Z letters in less - XML and HTML supported on both input and output
- XSLT transformation
- Validaton against DTD, RelaxNG and W3C Schemas
- XInclude support for both reading/writing
- XUpdate support
- Transparent conversion between XPath and Perl objects
- Global, local and lexical variables (as in Perl)
- User-defined procedures
- XML Namespace support in XPath expressions
- Lots of handy XPath extension functions
- Support for user-definable XPath extension functions, implemented in Perl
- Easy access to Perl and system calls
- Fully featured interactive shell with history and TAB-completion (for XSH commands, XPath expressions, variables, filenames, etc).
- Compilation into Perl script and Module::Compile support
- Extensive on-line help and documentation
- and more...