<?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, US-ASCII, 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>
