/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \example xmlstreamlint
    \title XML Stream Lint Example
    \ingroup xml-examples
    \brief A commandline tool reading from an input file and writing to
    the standard output file.

    The XML Stream Lint example provides a simple command line utility that
    accepts a file name as its single argument and writes it to the standard
    output file.

    The specified file is parsed using an QXmlStreamReader object and written
    to the standard output file using an QXmlStreamWriter object. If the file
    does not contain a well-formed XML document or the use of namespaces in
    the document is incorrect, a description of the error is printed to
    the standard error file and will appear in the console.

    \section1 Basic Operation

    The main function of the example opens the file specified by the user
    for input (\c inputFile), and it uses QFile to access the standard output
    file.

    Reading XML is handled by an instance of the QXmlStreamReader class, which
    operates on the input file object; writing is handled by an instance of
    QXmlStreamWriter operating on the output file object:

    \snippet xmlstreamlint/main.cpp 0

    The work of parsing and rewriting the XML is done in a while loop, and is
    driven by input from the reader:

    \snippet xmlstreamlint/main.cpp 1

    If more input is available, the next token from the input file is read
    and parsed. If an error occurred, information is written to the standard
    error file via a stream, and the example exits by returning a non-zero
    value from the main function.

    \snippet xmlstreamlint/main.cpp 2

    For valid input, the writer is fed the current token from the reader,
    and this is written to the output file that was specified when it was
    constructed.

    When there is no more input, the loop terminates, and the example can
    exit successfully.
*/
