My text editor of choice on the Mac is TextWrangler. It’s lightweight and it has pretty much all you need from a text editor. In particular, I like that I can SFTP into my development server.
One issue that bugged me lately was when I opened an unindented, unformatted XML file. Basically, it looked a mess and there was no way to tidy the file up so that I could read it easily.
However, I found a simple way to do this today… thanks to this and this.
Simple guide
We want to add a UNIX script to TextWrangler so it can format an XML file… to do this, do this…
- Open TextWrangler and open a new text file.
- Copy and paste the code below into this file.
#!/bin/sh xmllint --c14n "$*" | XMLLINT_INDENT=$'\t' xmllint --encode UTF-8 --format -
- Now anytime you want to format an XML file, just go to this menu and select the Tidy XML.sh script and BOOM, neat tidy XML.

This is an interesting facility to extend an already great text editor, and I will be looking into more cool scripts that can hopefully lessen my daily annoyances.
UPDATED:: Added UTF8 encoding, thanks Rolan.
UPDATED:: Added a post to format PHP code in TextWrangler.
Thank you, thank you, thank you! You’ve saved my date
And now s/date/day
Pingback: Format XML with TextWrangler – Cristian’s blog
Pingback: Textwrangler Tips – Compare files, keyboard shortcuts « Magp.ie
Awesome! Thanks for putting this together!
OMG you just saved me so much time, you have no idea. Thank you!!
Brilliant! Not sure why this isn’t standard functionality in text editors these days but many thanks for showing us how easy it is to add!
Thanks!
Small addition that was useful for me:
If you are working with UTF-8 encoded files – then the following parameter is required:
--encode UTF-8
Pingback: Tidy and format your PHP and meet WordPress standards on Coda and TextWrangler « Magp.ie
Thanks a lot! Works beautifully.
Thanks this was really useful!
great tips.. I have been trying to find how to implement this in TextWrangler from many sites, but yours is the easiest to understand ..
cheers!
Muchos gracias!
Very nice. Simple and efficient. Thanks to publishing it.
Awesome time saver!
Hi,
Great script. I have had only one problem. It’s not formating properly empty tags like that:
So for a file it looks like that:
6982760
graphic
89.000000
A20110609T092928_M_192_168_112_212_01.eps
Any chance to fix it?
Piotr
Hmm.. all xml code was just exchanged for something else. Any way to post xml inside comment?
Piotr
Hi Piotr, you could try posting the xml in the comment within the sourcecode shortcode
Thank You
Perfect, thank you.
Thanks, cool tip
Is there a way to have the script not truncate empty tags? I need the XML output to format empty tags with both the open and closing tags like so:
instead of
Please advise.
Looks like it didn’t post my XML examples. Here they are:
Desired:
“”
Currently, the script truncates to this:
“”
Hi Michael, you could try posting the xml in the comment within the sourcecode shortcode
Thank you Thank you Thank you.
Great solution!
However, there’s a big caveat: Tidy also deletes CDATA tags! If you need your XML to maintain the original text as it was, you may run into trouble.
Tidy does “the right thing” by replacing sensitive characters with their entities, e.g.:
is transformed to
This is OK for information in an HTML context, but not if you need the content for other output channels like print!
Thanks!!!
Dude, where can I send $1,000,000.00? Seriously, Text Wrangler is my text editor of choice but it’s lack of pretty printing functionality for xml was a pain. I have been looking for a good xml editor to accomplish just what this simple script does. Thanks a bunch!
Very helpful. Thank you very much for taking the time to write this up.