["table", ["tbody", ["tr", ["td class=first", 1], ["td", 2]]]]
instead of: <table><tbody><tr><td class="first">1</td><td>2</td></tr></tbody></table>
A really early attempt at this is: https://github.com/drostie/d.o/blob/master/build.js but I haven't maintained it in a while.If you're interested in language design, there appears to be a "little gap" which means a lot between a Lisp data structure and an XML data structure: In XML's view, every list's first element is a string; in Lisp's, it can be anything. This little gap actually corresponds to one of the interesting habits which has disappeared since compilers took over our assembly-writing: it used to be the case that programmers would sometimes compute an instruction code for the next instruction; similarly in Lisps you sometimes (but not too often; it's confusing!) compute a function for your next operation.
If that confuses you because you're not good with Lisp, it's equivalent in Python or JS is:
(f(x, y, z))(a, b, c)
so that you figure out which function to call and then immediately call it on some parameters. It's not necessarily a difference in expressiveness, as the XML-style just can add an atom 'call' which expresses the above as: call(f(x y z) a b c)
but it does seem to correspond to some deeply different philosophy for the system.