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 help text
-H
|--html
- Generate HTML output
-J
|--json
- Generate JSON output
--leading-xpath
path- Add a prefix to generated XPaths (HTML)
--open
path- Open tags for the given path
-p
|--pretty
- Make 'pretty' output (add indent, newlines)
--style
style- Generate given style (xml, json, text, html)
-T
|--text
- Generate text output (the default style)
--version
- Display version information
-W
|--warn
- Display warnings in text on stderr
--warn-xml
- Display warnings in xml on stdout
--wrap
path- Wrap output in a set of containers
-X
|--xml
- 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.
In addition, xo
accepts any of the
libxo
options listed in
xo_options(7).
EXAMPLES
In this example, xo
is used to emit the
same data encoded in text and then in XML by adding the "-p"
(pretty) and "-X" (XML output) flags:
% xo 'The {:product} is {:status}\n' stereo "in route" The stereo is in route % xo -p -X 'The {:product} is {:status}\n' stereo "in route" <product>stereo</product> <status>in route</status>
In this example, the output from a xo
command is shown in several styles:
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" } }
SEE ALSO
HISTORY
The libxo
library first appeared in
FreeBSD 11.0.
AUTHORS
libxo
was written by Phil
Shafer
<phil@freebsd.org>.