<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>xmllint</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry"><a name="idm1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>xmllint &#8212; command line <acronym class="acronym">XML</acronym> tool</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">xmllint</code>  [ <code class="option">--version</code>  |   <code class="option">--debug</code>  |   <code class="option">--quiet</code>  |   <code class="option">--shell</code>  |   <code class="option">--xpath "<em class="replaceable"><code>XPath_expression</code></em>"</code>  |   <code class="option">--debugent</code>  |   <code class="option">--copy</code>  |   <code class="option">--recover</code>  |   <code class="option">--nodict</code>  |   <code class="option">--noent</code>  |   <code class="option">--noout</code>  |   <code class="option">--nonet</code>  |   <code class="option">--path "<em class="replaceable"><code>PATH(S)</code></em>"</code>  |   <code class="option">--load-trace</code>  |   <code class="option">--htmlout</code>  |   <code class="option">--nowrap</code>  |   <code class="option">--valid</code>  |   <code class="option">--postvalid</code>  |   <code class="option">--dtdvalid <em class="replaceable"><code>URL</code></em></code>  |   <code class="option">--dtdvalidfpi <em class="replaceable"><code>FPI</code></em></code>  |   <code class="option">--timing</code>  |   <code class="option">--output <em class="replaceable"><code>FILE</code></em></code>  |   <code class="option">--repeat</code>  |   <code class="option">--insert</code>  |   <code class="option">--compress</code>  |   <code class="option">--html</code>  |   <code class="option">--xmlout</code>  |   <code class="option">--push</code>  |   <code class="option">--memory</code>  |   <code class="option">--max-ampl <em class="replaceable"><code>INTEGER</code></em></code>  |   <code class="option">--maxmem <em class="replaceable"><code>NBBYTES</code></em></code>  |   <code class="option">--nowarning</code>  |   <code class="option">--noblanks</code>  |   <code class="option">--nocdata</code>  |   <code class="option">--format</code>  |   <code class="option">--encode <em class="replaceable"><code>ENCODING</code></em></code>  |   <code class="option">--dropdtd</code>  |   <code class="option">--nsclean</code>  |   <code class="option">--testIO</code>  |   <code class="option">--catalogs</code>  |   <code class="option">--nocatalogs</code>  |   <code class="option">--auto</code>  |   <code class="option">--xinclude</code>  |   <code class="option">--noxincludenode</code>  |   <code class="option">--loaddtd</code>  |   <code class="option">--dtdattr</code>  |   <code class="option">--stream</code>  |   <code class="option">--walker</code>  |   <code class="option">--pattern <em class="replaceable"><code>PATTERNVALUE</code></em></code>  |   <code class="option">--chkregister</code>  |   <code class="option">--relaxng <em class="replaceable"><code>SCHEMA</code></em></code>  |   <code class="option">--schema <em class="replaceable"><code>SCHEMA</code></em></code>  |   <code class="option">--c14n</code>  |   <code class="option">--pedantic</code> ] { <em class="replaceable"><code>XML-FILE(S)</code></em>...  |   - }</p></div><div class="cmdsynopsis"><p><code class="command">xmllint</code>   <code class="option">--help</code> </p></div></div><div class="refsect1"><a name="description"></a><h2>DESCRIPTION</h2><p>
        The <span class="command"><strong>xmllint</strong></span> program parses one or more <acronym class="acronym">XML</acronym> files,
        specified on the command line as <em class="replaceable"><code>XML-FILE</code></em>
        (or the standard input if the filename provided
        is <span class="bold"><strong>-</strong></span> ). It prints various types of
        output, depending upon the options selected. It is useful for detecting
        errors both in <acronym class="acronym">XML</acronym> code and in
        the <acronym class="acronym">XML</acronym> parser itself.
    </p><p><span class="command"><strong>xmllint</strong></span> is included in <span class="citerefentry"><span class="refentrytitle">libxml</span>(3)</span>.</p></div><div class="refsect1"><a name="options"></a><h2>OPTIONS</h2><p>
        <span class="command"><strong>xmllint</strong></span> accepts the following options (in alphabetical order):
    </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">--auto</code></span></dt><dd><p>Generate a small document for testing purposes.</p></dd><dt><span class="term"><code class="option">--catalogs</code></span></dt><dd><p>
                    Use the <acronym class="acronym">SGML</acronym> catalog(s) from <code class="envar">SGML_CATALOG_FILES</code>.
                    Otherwise <acronym class="acronym">XML</acronym> catalogs starting
                    from <code class="filename">/etc/xml/catalog</code> or, more specifically,
                    <code class="filename">${sysconfdir}/xml/catalog</code> are used by default.
                </p></dd><dt><span class="term"><code class="option">--chkregister</code></span></dt><dd><p>
                    Turn on node registration. Useful for developers testing <span class="citerefentry"><span class="refentrytitle">libxml</span>(3)</span> node tracking code.
                </p></dd><dt><span class="term"><code class="option">--compress</code></span></dt><dd><p>
                    Turn on <span class="citerefentry"><span class="refentrytitle">gzip</span>(1)</span> compression of output.
                </p></dd><dt><span class="term"><code class="option">--copy</code></span></dt><dd><p>Test the internal copy implementation.</p></dd><dt><span class="term"><code class="option">--c14n</code></span></dt><dd><p>
                    Use the W3C <acronym class="acronym">XML</acronym> Canonicalisation (<acronym class="acronym">C14N</acronym>) to
                    serialize the result of parsing to <code class="filename">stdout</code>.
                    It keeps comments in the result.
                </p></dd><dt><span class="term"><code class="option">--dtdvalid <em class="replaceable"><code>URL</code></em></code></span></dt><dd><p>
                    Use the <acronym class="acronym">DTD</acronym> specified by
                    an <em class="replaceable"><code>URL</code></em> for validation.
                </p></dd><dt><span class="term"><code class="option">--dtdvalidfpi <em class="replaceable"><code>FPI</code></em></code></span></dt><dd><p>
                    Use the <acronym class="acronym">DTD</acronym> specified by a Formal Public
                    Identifier <em class="replaceable"><code>FPI</code></em> for validation, note that this
                    will require a catalog exporting that Formal Public Identifier to work.
                </p></dd><dt><span class="term"><code class="option">--debug</code></span></dt><dd><p>
                    Parse a file and output an annotated tree of the
                    in-memory version of the document.
                </p></dd><dt><span class="term"><code class="option">--debugent</code></span></dt><dd><p>Debug the entities defined in the document.</p></dd><dt><span class="term"><code class="option">--dropdtd</code></span></dt><dd><p>Remove <acronym class="acronym">DTD</acronym> from output.</p></dd><dt><span class="term"><code class="option">--dtdattr</code></span></dt><dd><p>
                    Fetch external <acronym class="acronym">DTD</acronym> and populate the tree with
                    inherited attributes.
                </p></dd><dt><span class="term"><code class="option">--encode <em class="replaceable"><code>ENCODING</code></em></code></span></dt><dd><p>Output in the given encoding. Note that this works for full document not fragments or result from XPath queries.</p></dd><dt><span class="term"><code class="option">--format</code></span></dt><dd><p>
                    Reformat and reindent the output. The <code class="envar">XMLLINT_INDENT</code>
                    environment variable controls the indentation. The default value is two
                    spaces "  ").
                </p></dd><dt><span class="term"><code class="option">--help</code></span></dt><dd><p>Print out a short usage summary for <span class="command"><strong>xmllint</strong></span>.</p></dd><dt><span class="term"><code class="option">--html</code></span></dt><dd><p>Use the <acronym class="acronym">HTML</acronym> parser.</p></dd><dt><span class="term"><code class="option">--htmlout</code></span></dt><dd><p>
                    Output results as an <acronym class="acronym">HTML</acronym> file. This
                    causes <span class="command"><strong>xmllint</strong></span> to output the necessary <acronym class="acronym">HTML</acronym>
                    tags surrounding the result tree output so the results can be
                    displayed/viewed in a browser.
                </p></dd><dt><span class="term"><code class="option">--insert</code></span></dt><dd><p>Test for valid insertions.</p></dd><dt><span class="term"><code class="option">--loaddtd</code></span></dt><dd><p>Fetch an external <acronym class="acronym">DTD</acronym>.</p></dd><dt><span class="term"><code class="option">--load-trace</code></span></dt><dd><p>
                    Display all the documents loaded during the processing
                    to <code class="filename">stderr</code>.
                </p></dd><dt><span class="term"><code class="option">--max-ampl <em class="replaceable"><code>INTEGER</code></em></code></span></dt><dd><p>
                    Set the maximum amplification factor which protects against
                    exponential entity expansion ("billion laughs"). The default value
                    is 5. Documents making heavy use of entity expansion may require a
                    higher value.
                </p></dd><dt><span class="term"><code class="option">--maxmem <em class="replaceable"><code>NNBYTES</code></em></code></span></dt><dd><p>
                    Test the parser memory support. <em class="replaceable"><code>NNBYTES</code></em>
                    is the maximum number of bytes the library is allowed to allocate.
                    This can also be used to make sure batch processing
                    of <acronym class="acronym">XML</acronym> files will not exhaust the virtual memory
                    of the server running them.
                </p></dd><dt><span class="term"><code class="option">--memory</code></span></dt><dd><p>Parse from memory.</p></dd><dt><span class="term"><code class="option">--noblanks</code></span></dt><dd><p>Drop ignorable blank spaces.</p></dd><dt><span class="term"><code class="option">--nocatalogs</code></span></dt><dd><p>Do not use any catalogs.</p></dd><dt><span class="term"><code class="option">--nocdata</code></span></dt><dd><p>Substitute CDATA section by equivalent text nodes.</p></dd><dt><span class="term"><code class="option">--nodict</code></span></dt><dd><p>
                    Don't use dictionaries (parser option XML_PARSE_NODICT).
                    Only for debugging.
                </p></dd><dt><span class="term"><code class="option">--noent</code></span></dt><dd><p>
                    Substitute entity values for entity references. By default, <span class="command"><strong>xmllint</strong></span>
                    leaves entity references in place.
                </p></dd><dt><span class="term"><code class="option">--nonet</code></span></dt><dd><p>
                    Do not use the Internet to fetch <acronym class="acronym">DTD</acronym>s or entities.
                </p></dd><dt><span class="term"><code class="option">--noout</code></span></dt><dd><p>
                    Suppress output. By default, <span class="command"><strong>xmllint</strong></span> outputs the result tree.
                </p></dd><dt><span class="term"><code class="option">--nowarning</code></span></dt><dd><p>Do not emit warnings from the parser and/or validator.</p></dd><dt><span class="term"><code class="option">--nowrap</code></span></dt><dd><p>Do not output <acronym class="acronym">HTML</acronym> doc wrapper.</p></dd><dt><span class="term"><code class="option">--noxincludenode</code></span></dt><dd><p>
                    Do XInclude processing but do not generate XInclude start and end nodes.
                </p></dd><dt><span class="term"><code class="option">--nsclean</code></span></dt><dd><p>Remove redundant namespace declarations.</p></dd><dt><span class="term"><code class="option">--output <em class="replaceable"><code>FILE</code></em></code></span></dt><dd><p>
                    Define a file path where <span class="command"><strong>xmllint</strong></span> will save the result of parsing.
                    Usually the programs build a tree and save it
                    on <code class="filename">stdout</code>, with this option
                    the result <acronym class="acronym">XML</acronym> instance will be saved onto a file.
                </p></dd><dt><span class="term"><code class="option">--path "<em class="replaceable"><code>PATH(S)</code></em>"</code></span></dt><dd><p>
                    Use the (space- or colon-separated) list of filesystem paths specified
                    by <em class="replaceable"><code>PATHS</code></em> to load <acronym class="acronym">DTD</acronym>s or
                    entities. Enclose space-separated lists by quotation marks.
                </p></dd><dt><span class="term"><code class="option">--pattern <em class="replaceable"><code>PATTERNVALUE</code></em></code></span></dt><dd><p>
                    Used to exercise the pattern recognition engine, which can be used
                    with the reader interface to the parser. It allows to select some
                    nodes in the document based on an XPath (subset) expression. Used
                    for debugging.
                </p></dd><dt><span class="term"><code class="option">--pedantic</code></span></dt><dd><p>Enable additional warnings.</p></dd><dt><span class="term"><code class="option">--postvalid</code></span></dt><dd><p>Validate after parsing has completed.</p></dd><dt><span class="term"><code class="option">--push</code></span></dt><dd><p>Use the push mode of the parser.</p></dd><dt><span class="term"><code class="option">--quiet</code></span></dt><dd><p>Don't print informational messages to stderr.</p></dd><dt><span class="term"><code class="option">--recover</code></span></dt><dd><p>Output any parsable portions of an invalid document.</p></dd><dt><span class="term"><code class="option">--relaxng <em class="replaceable"><code>SCHEMA</code></em></code></span></dt><dd><p>
                    Use RelaxNG file named <em class="replaceable"><code>SCHEMA</code></em>
                    for validation.
                </p></dd><dt><span class="term"><code class="option">--repeat</code></span></dt><dd><p>Repeat 100 times, for timing or profiling.</p></dd><dt><span class="term"><code class="option">--schema <em class="replaceable"><code>SCHEMA</code></em></code></span></dt><dd><p>
                    Use a W3C <acronym class="acronym">XML</acronym> Schema file
                    named <em class="replaceable"><code>SCHEMA</code></em> for validation.
                </p></dd><dt><span class="term"><code class="option">--shell</code></span></dt><dd><p>
                    Run a navigating shell. Details on available commands in shell mode
                    are below (see <a class="xref" href="#shell" title="SHELL COMMANDS">the section called &#8220;SHELL COMMANDS&#8221;</a>).
                </p></dd><dt><span class="term"><code class="option">--xpath "<em class="replaceable"><code>XPath_expression</code></em>"</code></span></dt><dd><p>
                    Run an XPath expression given as argument and print the
                    result. In case of a nodeset result, each node in the
                    node set is serialized in full in the output. In case
                    of an empty node set the "XPath set is empty" result
                    will be shown and an error exit code will be returned.
                </p></dd><dt><span class="term"><code class="option">--stream</code></span></dt><dd><p>
                    Use streaming <acronym class="acronym">API</acronym> - useful when used in combination
                    with <code class="option">--relaxng</code> or <code class="option">--valid</code> options
                    for validation of files that are too large to be held in memory.
                </p></dd><dt><span class="term"><code class="option">--testIO</code></span></dt><dd><p>Test user input/output support.</p></dd><dt><span class="term"><code class="option">--timing</code></span></dt><dd><p>
                    Output information about the time it takes <span class="command"><strong>xmllint</strong></span> to perform the
                    various steps.
                </p></dd><dt><span class="term"><code class="option">--valid</code></span></dt><dd><p>
                    Determine if the document is a valid instance of the included
                    Document Type Definition (<acronym class="acronym">DTD</acronym>).
                    A <acronym class="acronym">DTD</acronym> to be validated against also can be
                    specified at the command line using the <code class="option">--dtdvalid</code>
                    option. By default, <span class="command"><strong>xmllint</strong></span> also checks to determine if the
                    document is well-formed.
                </p></dd><dt><span class="term"><code class="option">--version</code></span></dt><dd><p>
                    Display the version of <span class="citerefentry"><span class="refentrytitle">libxml</span>(3)</span> used.
                </p></dd><dt><span class="term"><code class="option">--walker</code></span></dt><dd><p>
                    Test the walker module, which is a reader interface but for a
                    document tree, instead of using the reader <acronym class="acronym">API</acronym> on
                    an unparsed document it works on an existing in-memory tree. Used for
                    debugging.
                </p></dd><dt><span class="term"><code class="option">--xinclude</code></span></dt><dd><p>Do XInclude processing.</p></dd><dt><span class="term"><code class="option">--xmlout</code></span></dt><dd><p>
                    Used in conjunction with <code class="option">--html</code>. Usually
                    when <acronym class="acronym">HTML</acronym> is parsed the document is saved with
                    the <acronym class="acronym">HTML</acronym> serializer. But with this option the
                    resulting document is saved with the <acronym class="acronym">XML</acronym>
                    serializer. This is primarily used to
                    generate <acronym class="acronym">XHTML</acronym> from <acronym class="acronym">HTML</acronym> input.
                </p></dd></dl></div></div><div class="refsect1"><a name="shell"></a><h2>SHELL COMMANDS</h2><p>
        <span class="command"><strong>xmllint</strong></span> offers an interactive shell mode invoked with
        the <code class="option">--shell</code> command. Available commands in shell mode
        include (in alphabetical order):
    </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><span class="command"><strong>base</strong></span></span></dt><dd><p>Display <acronym class="acronym">XML</acronym> base of the node.</p></dd><dt><span class="term"><span class="command"><strong>bye</strong></span></span></dt><dd><p>Leave the shell.</p></dd><dt><span class="term"><span class="command"><strong>cat <em class="replaceable"><code>NODE</code></em></strong></span></span></dt><dd><p>Display the given node or the current one.</p></dd><dt><span class="term"><span class="command"><strong>cd <em class="replaceable"><code>PATH</code></em></strong></span></span></dt><dd><p>
                    Change the current node to the given path (if unique) or root if no
                    argument is given.
                </p></dd><dt><span class="term"><span class="command"><strong>dir <em class="replaceable"><code>PATH</code></em></strong></span></span></dt><dd><p>
                    Dumps information about the node (namespace, attributes, content).
                </p></dd><dt><span class="term"><span class="command"><strong>du <em class="replaceable"><code>PATH</code></em></strong></span></span></dt><dd><p>
                    Show the structure of the subtree under the given path or the current node.
                </p></dd><dt><span class="term"><span class="command"><strong>exit</strong></span></span></dt><dd><p>Leave the shell.</p></dd><dt><span class="term"><span class="command"><strong>help</strong></span></span></dt><dd><p>Show this help.</p></dd><dt><span class="term"><span class="command"><strong>free</strong></span></span></dt><dd><p>Display memory usage.</p></dd><dt><span class="term"><span class="command"><strong>load <em class="replaceable"><code>FILENAME</code></em></strong></span></span></dt><dd><p>Load a new document with the given filename.</p></dd><dt><span class="term"><span class="command"><strong>ls <em class="replaceable"><code>PATH</code></em></strong></span></span></dt><dd><p>List contents of the given path or the current directory.</p></dd><dt><span class="term"><span class="command"><strong>pwd</strong></span></span></dt><dd><p>Display the path to the current node.</p></dd><dt><span class="term"><span class="command"><strong>quit</strong></span></span></dt><dd><p>Leave the shell.</p></dd><dt><span class="term"><span class="command"><strong>save <em class="replaceable"><code>FILENAME</code></em></strong></span></span></dt><dd><p>
                    Save the current document to the given filename or to the original name.
                </p></dd><dt><span class="term"><code class="option">validate</code></span></dt><dd><p>Check the document for errors.</p></dd><dt><span class="term"><span class="command"><strong>write <em class="replaceable"><code>FILENAME</code></em></strong></span></span></dt><dd><p>Write the current node to the given filename.</p></dd></dl></div></div><div class="refsect1"><a name="environment"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="envar">SGML_CATALOG_FILES</code></span></dt><dd><p><acronym class="acronym">SGML</acronym> catalog behavior can be changed by redirecting
                    queries to the user's own set of catalogs. This can be done by setting
                    the <code class="envar">SGML_CATALOG_FILES</code> environment variable to a list
                    of catalogs. An empty one should deactivate loading the
                    default catalog.
                </p></dd><dt><span class="term"><code class="envar">XML_CATALOG_FILES</code></span></dt><dd><p><acronym class="acronym">XML</acronym> catalog behavior can be changed by redirecting
                    queries to the user's own set of catalogs. This can be done by setting
                    the <code class="envar">XML_CATALOG_FILES</code> environment variable to a space-separated
                    list of catalogs. Use percent-encoding to escape spaces or other characters.
                    An empty variable should deactivate loading the default catalog.
                </p></dd><dt><span class="term"><code class="envar">XML_DEBUG_CATALOG</code></span></dt><dd><p>Setting the environment variable <code class="envar">XML_DEBUG_CATALOG</code>
                    to <em class="parameter"><code>non-zero</code></em> using the <span class="command"><strong>export</strong></span>
                    command outputs debugging information related to catalog operations.
                </p></dd><dt><span class="term"><code class="envar">XMLLINT_INDENT</code></span></dt><dd><p>Setting the environment variable <code class="envar">XMLLINT_INDENT</code>
                    controls the indentation. The default value is two spaces "  ".
                </p></dd></dl></div></div><div class="refsect1"><a name="diagnostics"></a><h2>DIAGNOSTICS</h2><p>
        <span class="command"><strong>xmllint</strong></span> return codes provide information that can be used when
        calling it from scripts.
    </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><span class="errorcode">0</span></span></dt><dd><p>No error</p></dd><dt><span class="term"><span class="errorcode">1</span></span></dt><dd><p>Unclassified</p></dd><dt><span class="term"><span class="errorcode">2</span></span></dt><dd><p>Error in <acronym class="acronym">DTD</acronym></p></dd><dt><span class="term"><span class="errorcode">3</span></span></dt><dd><p>Validation error</p></dd><dt><span class="term"><span class="errorcode">4</span></span></dt><dd><p>Validation error</p></dd><dt><span class="term"><span class="errorcode">5</span></span></dt><dd><p>Error in schema compilation</p></dd><dt><span class="term"><span class="errorcode">6</span></span></dt><dd><p>Error writing output</p></dd><dt><span class="term"><span class="errorcode">7</span></span></dt><dd><p>
                    Error in pattern (generated when <code class="option">--pattern</code> option is used)
                </p></dd><dt><span class="term"><span class="errorcode">8</span></span></dt><dd><p>
                    Error in Reader registration (generated
                    when <code class="option">--chkregister</code> option is used)
                </p></dd><dt><span class="term"><span class="errorcode">9</span></span></dt><dd><p>Out of memory error</p></dd><dt><span class="term"><span class="errorcode">10</span></span></dt><dd><p>XPath evaluation error</p></dd></dl></div></div><div class="refsect1"><a name="seealso"></a><h2>SEE ALSO</h2><p><span class="citerefentry"><span class="refentrytitle">libxml</span>(3)</span>
    </p><p>
        More information can be found at
        </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="citerefentry"><span class="refentrytitle">libxml</span>(3)</span> web page <a class="ulink" href="https://gitlab.gnome.org/GNOME/libxml2" target="_top">https://gitlab.gnome.org/GNOME/libxml2</a>
                </p></li></ul></div><p>
    </p></div></div></body></html>
