There is nothing wrong with this function, but a simpler approach is using reformatter, a nice tool from the prolific mind of Steve Purcell.
Once installed, defining a new formatter is trivial:
(reformatter-define xml-format :program "xmllint" :args '("--format" "-") :mode nil)
Now I can add a key binding for
xml-format or simply type M-x xml-format in an
XML buffer to have it nicely printed.
Note that setting
reformatter-define to not create a minor
mode, which I don’t need in this particular case. The minor mode could be useful
if you want your formatter to be called automatically when you save a buffer.
For instance, without changing the default setting for
:mode you could set up
the formatter in a project via
((nxml-mode (mode . xml-format-on-save)))
You can also specify other options when creating a formatter, so be sure to
check the documentation of
reformatter-define (C-h f reformatter-define).