NAME
xo
—
emit formatted output based on format
string and arguments
SYNOPSIS
xo |
[-options ]
[argument...] |
DESCRIPTION
Thexo
utility allows command line access to the
functionality of the libxo
library. Using
xo
, shell scripts can emit
XML,
JSON, or
HTML using
the same commands that emit text output.
--close <path>
- Close tags for the given path
--depth <num>
- Set the depth for pretty printing
--help
- Display this help text
--html OR -H
- Generate HTML output
--json OR -J
- Generate JSON output
--leading-xpath <path>
- Add a prefix to generated XPaths (HTML)
--open <path>
- Open tags for the given path
--pretty OR -p
- Make 'pretty' output (add indent, newlines)
--style <style>
- Generate given style (xml, json, text, html)
--text OR -T
- Generate text output (the default style)
--version
- Display version information
--warn OR -W
- Display warnings in text on stderr
--warn-xml
- Display warnings in xml on stdout
--wrap <path>
- Wrap output in a set of containers
--xml OR -X
- Generate XML output
--xpath
- Add XPath data to HTML output
The xo
utility accepts a format string
suitable for
xo_emit(3) and a set of zero or more arguments used to supply data
for that string.
xo "The {k:name} weighs {:weight/%d} pounds.\n" fish 6 TEXT: The fish weighs 6 pounds. XML: <name>fish</name> <weight>6</weight> JSON: "name": "fish", "weight": 6 HTML: <div class="line"> <div class="text">The </div> <div class="data" data-tag="name">fish</div> <div class="text"> weighs </div> <div class="data" data-tag="weight">6</div> <div class="text"> pounds.</div> </div>
The --wrap <path>
option can be used
to wrap emitted content in a specific hierarchy. The path is a set of
hierarchical names separated by the '/' character.
xo --wrap top/a/b/c '{:tag}' value XML: <top> <a> <b> <c> <tag>value</tag> </c> </b> </a> </top> JSON: "top": { "a": { "b": { "c": { "tag": "value" } } } }
The --open <path>
and
--close <path>
can be used to emit
hierarchical information without the matching close and open tag. This
allows a shell script to emit open tags, data, and then close tags. The
--depth
option may be used to set the depth for
indentation. The --leading-xpath
may be used to
prepend data to the XPath values used for HTML output style.
#!/bin/sh xo --open top/data xo --depth 2 '{tag}' value xo --close top/data XML: <top> <data> <tag>value</tag> </data> </top> JSON: "top": { "data": { "tag": "value" } }
EXAMPLE
% xo 'The {:product} is {:status}0 stereo "in route" The stereo is in route % xo -p -X 'The {:product} is {:status}0 stereo "in route" <product>stereo</product> <status>in route</status>