xmllint
This utility comes with libxml2-utils:
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    xmllint --format -
Perl's XML::Twig
This command comes with XML::Twig perl module, sometimes xml-twig-tools package:
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    xml_pp
xmlstarlet
This command comes with xmlstarlet:
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    xmlstarlet format --indent-tab
tidy
Check the tidy package:
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    tidy -xml -i -
Python
Python's xml.dom.minidom can format XML (works also on legacy python2):
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    python -c 'import sys; import xml.dom.minidom; s=sys.stdin.read(); print(xml.dom.minidom.parseString(s).toprettyxml())'
saxon-lint
You need saxon-lint:
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    saxon-lint --indent --xpath '/' -
saxon-HE
You need saxon-HE:
 echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    java -cp /usr/share/java/saxon/saxon9he.jar net.sf.saxon.Query \
    -s:- -qs:/ '!indent=yes'
xidel
You need xidel:
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
    xidel -s - -se . --output-node-format=xml --output-node-indent
(Credit to Reino)
Output for all commands:
<root>
  <foo a="b">lorem</foo>
  <bar value="ipsum"/>
</root>