<?xml version="1.0" standalone="no"?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->

<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">

<s1 title="Sample: DOMPrint">

    <s2 title="DOMPrint">
        <p>DOMPrint parses an XML file, constructs the DOM tree, and
		   invokes DOMLSSerializer::write() to serialize the resultant
		   DOM tree back to XML stream.
		</p>

        <s3 title="Running DOMPrint">

          <p>The DOMPrint sample parses an XML file, using either a validating
		  or non-validating DOM parser configuration, builds a DOM tree,
		  and then invokes DOMLSSerializer::write() to serialize the
		  resultant DOM tree. To run DOMPrint, enter the following:</p>
<source>DOMPrint &lt;XML file&gt;</source>
          <p>The following parameters may be set from the command line </p>
<source>
Usage:
 DOMPrint [options] &lt;XML file&gt;

This program invokes the DOM parser, and builds the DOM tree
It then asks the DOMLSSerializer to serialize the DOM tree.

Options:
    -e          create entity reference nodes. Default is no expansion.
    -v=xxx      Validation scheme [always | never | auto*].
    -n          Enable namespace processing. Default is off.
    -s          Enable schema processing. Default is off.
    -f          Enable full schema constraint checking. Defaults is off.
    -wenc=XXX   Use a particular encoding for output. Default is
                the same encoding as the input XML file. UTF-8 if
                input XML file has not XML declaration.
    -wfile=xxx  Write to a file instead of stdout.
    -wscs=xxx   Enable/Disable split-cdata-sections.      Default on.
    -wddc=xxx   Enable/Disable discard-default-content.   Default on.
    -wflt=xxx   Enable/Disable filtering.                 Default off.
    -wfpp=xxx   Enable/Disable format-pretty-print.       Default off.
    -wbom=xxx   Enable/Disable write Byte-Order-Mark      Default off.
    -?          Show this help
  * = Default if not provided explicitly.

The parser has intrinsic support for the following encodings:\n"
    UTF-8, USASCII, ISO8859-1, UTF-16[BL]E, UCS-4[BL]E,\n"
    WINDOWS-1252, IBM1140, IBM037, IBM1047.\n"
</source>
          <p><em>-v=always</em> will force validation<br/>
             <em>-v=never</em>  will not use any validation<br/>
             <em>-v=auto</em>   will validate if a DOCTYPE declaration or a schema declaration is present in the XML document</p>
          <p>Here is a sample output from DOMPrint</p>
<source>cd &XercesC3InstallDir;/samples/data
DOMPrint -v=always personal.xml

&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;

&lt;!DOCTYPE personnel SYSTEM "personal.dtd"&gt;
&lt;!-- @version: --&gt;
&lt;personnel&gt;

&lt;person id="Big.Boss"&gt;
  &lt;name&gt;&lt;family&gt;Boss&lt;/family&gt; &lt;given&gt;Big&lt;/given&gt;&lt;/name&gt;
  &lt;email&gt;chief@foo.com&lt;/email&gt;
  &lt;link subordinates="one.worker two.worker three.worker
                         four.worker five.worker"&gt;&lt;/link&gt;
&lt;/person&gt;

&lt;person id="one.worker"&gt;
  &lt;name&gt;&lt;family>Worker&lt;/family&gt; &lt;given&gt;One&lt;/given&gt;&lt;/name&gt;
  &lt;email&gt;one@foo.com&lt;/email&gt;
  &lt;link manager="Big.Boss"&gt;&lt;/link&gt;
&lt;/person&gt;

&lt;person id="two.worker"&gt;
  &lt;name&gt;&lt;family&gt;Worker&lt;/family&gt; &lt;given&gt;Two&lt;/given&gt;&lt;/name&gt;
  &lt;email&gt;two@foo.com&lt;/email&gt;
  &lt;link manager="Big.Boss"&gt;&lt;/link&gt;
&lt;/person&gt;

&lt;person id="three.worker"&gt;
  &lt;name&gt;&lt;family>Worker&lt;/family&gt; &lt;given&gt;Three&lt;/given&gt;&lt;/name&gt;
  &lt;email&gt;three@foo.com&lt;/email&gt;
  &lt;link manager="Big.Boss"&gt;&lt;/link&gt;
&lt;/person&gt;

&lt;person id="four.worker"&gt;
  &lt;name&gt;&lt;family&gt;Worker&lt;/family&gt; &lt;given&gt;Four&lt;/given&gt;&lt;/name&gt;
  &lt;email&gt;four@foo.com&lt;/email&gt;
  &lt;link manager="Big.Boss"&gt;&lt;/link&gt;
&lt;/person&gt;

&lt;person id="five.worker"&gt;
  &lt;name&gt;&lt;family&gt;Worker&lt;/family&gt; &lt;given&gt;Five&lt;/given&gt;&lt;/name&gt;
  &lt;email&gt;five@foo.com&lt;/email&gt;
  &lt;link manager="Big.Boss"&gt;&lt;/link&gt;
&lt;/person&gt;

&lt;/personnel&gt;</source>
        <p>Note that DOMPrint does not reproduce the original XML file. DOMPrint and
           SAXPrint produce different results because of the way the two APIs store data
           and capture events.</p>

        <p>Application needs to provide its own implementation of
		   DOMErrorHandler (in this sample, the DOMPrintErrorHandler),
		   if it would like to receive notification from the serializer
		   in the case any error occurs during the serialization.
		</p>

        <p>Application needs to provide its own implementation of
		   DOMLSSerializerFilter (in this sample, the DOMPrintFilter),
		   if it would like to filter out certain part of the DOM
		   representation, but must be aware that thus may render the
		   resultant XML stream invalid.
		</p>

        <p>Application may choose any combination of characters as the
		   end of line sequence to be used in the resultant XML stream,
		   but must be aware that this may render the resultant XML
		   stream ill formed.
        </p>

        <p>Application may choose a particular encoding name in which
		   the output XML stream should be, but must be aware that if
		   unrepresentable in the encoding specified characters appear
		   in the markup, it may force the serializer to terminate serialization
		   prematurely, and thus no complete serialization would be done.
		</p>

        <p>Application shall query the serializer first, before set any
           feature/mode(true, false), or be ready to catch exception if this
           feature/mode is not supported by the serializer.
	    </p>

        <p>Application needs to release the filter, error handler and
		   format target objects created for the serialization.
		</p>

        </s3>
    </s2>
</s1>
