XSMELL: awesomer XML creation
[2nd July 2009]
A little library I made recently seems to be amusing people. I hadn't found time to post it here until now. From the readme:
XSMELL README
Congratulations! You have in your hands the MOST BRILLIANTEST C++ XML CREATION LIBRARY EVER CREATED.
Have you ever needed to embed a quick snippet of HTML or XML in your C++ source code? Didn't you just hate having to use that obscure string concatenation syntax?
Well no more! With the advent of XSMELL you can now use regular XML syntax directly in your source code, thanks to the reckless use of operator overloading, template meta-programming and preprocessor macros:
using namespace xsmell; document doc = _ <html>_ <head>_ <title>"XSMELL demo"<!title>_ <!head>_ <body>_ <p>"Yesssssssssssssssss!"<!p>_ <img .src("chucknorris.png") .alt("sneezing eyes open")>_ <!img>_ <!body>_ <!html> _; std::cout << doc << '\n';That's right! Thanks to XSMELL you'll no longer suffer from S-Expression envy. You've got one up on those Lisp guys now — smug bastards!
And you no longer have to worry about generating malformed XML! After spending hours fighting obscure C++ compiler errors, you'll be 100% certain that your XML is correct.
NOTE: XSMELL requires Boost headers and a modern C++ compiler with support for C99 variadic macros.
If you really must get the code, it is available on bitbucket.
Comments
[21/01/2010 at 14:37:28]
At first, brilliantly well wrapped strings making elements, attributes and values. It's enjoyable way of using C++ indeed. I like it.
On the other hand, it's just a fancy way of streaming and concatenating characters. But still, the overall idea is nice and applicable in other situations:
path p = drive("C").dir("a").dir("b").file("mama.txt");
rest r = protocol("ftp").server("a").dir("b").resource("generate").("file").("mama.txt");
And, I second Dave's comment, the name is perfect :-)
All original content copyright© Edd Dawson.
All source code appearing on this website that was written by Edd Dawson is made available under the terms of the Boost software license version 1.0 unless otherwise stated or implied by the license associated with the work from which the code is derived.

Dave Abrahams
[28/09/2009 at 19:16:00]
This is awesome, right down to the choice of name.