<!-- 
   - The contents of this file are subject to the Mozilla Public
   - License Version 1.1 (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.mozilla.org/MPL/
   - 
   - Software distributed under the License is distributed on an "AS
   - IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
   - implied. See the License for the specific language governing
   - rights and limitations under the License.
   - 
   - The Original Code is Mozilla Test Cases.
   - 
   - The Initial Developer of the Original Code is Netscape Communications
   - Corp.  Portions created by Netscape Communications Corp. are 
   - Copyright (C) 2001 Netscape Communications Corp.  All
   - Rights Reserved.
   - 
   - Contributor(s): 
  -->
<html>
<head>
<title>DOMParser/XMLSerializer test</title>
<style type="text/css">
.box {
  display: box;
  border: 1px solid black;
  margin-bottom: 0.5em;
}
.boxheader {
  font-weight: bold;
  color: maroon;
}
pre {
  margin-left: 2em;
}
</style>
<script type="text/javascript">
function execute()
{
  var parser = new DOMParser();
  var str = 
    '<?xml version="1.0"?>\n<!DOCTYPE doc [\n<!ATTLIST d id ID #IMPLIED>\n]>\n<doc>\n  <foo xmlns="foobar">One</foo> <x:bar xmlns:x="barfoo">Two</x:bar>\n  <d id="id3">Three</d>\n<f id="&amp;&lt;&gt;">Four&amp;&lt;&gt;</f><empty/><empty></empty></doc>\n';
  var doc = parser.parseFromString(str,"text/xml");
  
  document.getElementById("id1").firstChild.nodeValue = str;
  document.getElementById("id2").firstChild.nodeValue = doc;
  var ser = new XMLSerializer();
  document.getElementById("id3").firstChild.nodeValue = ser.serializeToString(doc);
}

</script>
</head>
<body onload="execute();">
<h1>DOMParser/XMLSerializer test</h1>

<div>The "text to parse" and "document object serialized" boxes should show the same text, and it should be an XML document, not "@@No result@@".
</div>

<div class="box"><span class="boxheader">text to parse</span>
<pre id="id1">@@No result@@</pre>
</div>
<div class="box"><span class="boxheader">document object</span>
<pre id="id2">@@No result@@</pre>
</div>
<div class="box"><span class="boxheader">document object serialized</span>
<pre id="id3">@@No result@@</pre>
</div>

</body>
</html>
