XML Editing Shell

Volume 8, Issue 93; 13 Jun 2005; last modified 08 Oct 2010

Nifty line editor for XML.

I stumbled upon the XML Editing Shell (xsh) a couple of weeks ago. As a command-line kind of guy, I was immediately intrigued. According to the author, Petr Pajas:

XSH is a powerfull command-line tool for querying, processing and editing XML documents. It features a shell-like interface with auto-completion for comfortable interactive work, but can be as well used for off-line (batch) processing of XML data. XSH makes extensive use of the XPath language, but system shell and the Perl programming language are both accessible from XSH as well, in a very natural way.

I stuck it in my tool belt thinking that I might one day use it for some batch editing, but I didn't really think I'd be using it all that frequently. I'm happy to do most of my XML editing in emacs.

Then this morning I got a useless error message from xep. Something about fo:inline not being allowed in the context of fo:flow. Yeah, well, of course it isn't, but the message didn't provide any sort of clue about where the offending fo:inline actually occurred. I took a quick peek at the FO file and the prospect of digging through it looking for the error didn't fill me with joy.

Then I remembered xsh.

$ xsh
$scratch/> $f := open "nwn-uri.fo"
parsing nwn-uri.fo
$f/> register-namespace fo "http://www.w3.org/1999/XSL/Format"
$f/> ls //fo:flow/fo:inline
<fo:inline id="bottom"/>

Found 1 node(s).

Problem solved. Well, found anyway. I'm sure some of the XML editors out there let you find things with XPath. And there are no doubt other tools that I could have used. And I could certainly have banged together an XSL stylesheet to find the error. But xsh was quick and easy. Well worth having in your tool belt.

Note to self: this is, of course, functionality I should have in emacs.


Alex Schroeder wrote an XPath tool for Emacs. You can find it here along with some other things.

—Posted by Nikolas Coukouma on 13 Jun 2005 @ 06:57 UTC #
XMLStarlet is another tool:
$ xmlstar sel -N "f=http://www.w3.org/1999/XSL/Format" -t -v "//f:flow/f:inline/@id" foo.xml
—Posted by Tobi on 20 Jun 2005 @ 12:07 UTC #

P.S. Here's one way how it can be used from an editor:


—Posted by Tobi on 20 Jun 2005 @ 12:09 UTC #

Other tools are xmlclitool or HTML-XML-utils.

—Posted by Ismael Olea on 29 Dec 2006 @ 12:05 UTC #