Code Search for Developers
 
 
  

DOMWriter.html from PeerWriter at Krugle


Show DOMWriter.html syntax highlighted

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /><title>DOMWriter xref</title>
<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
</head>
<body>
<div id="overview"><a href="../../../../apidocs/org/dom4j/io/DOMWriter.html">View Javadoc</a></div><pre>

<a name="1" href="#1">1</a>   <em class="comment">/*</em>
<a name="2" href="#2">2</a>   <em class="comment"> * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.</em>
<a name="3" href="#3">3</a>   <em class="comment"> *</em>
<a name="4" href="#4">4</a>   <em class="comment"> * This software is open source.</em>
<a name="5" href="#5">5</a>   <em class="comment"> * See the bottom of this file for the licence.</em>
<a name="6" href="#6">6</a>   <em class="comment"> */</em>
<a name="7" href="#7">7</a>   
<a name="8" href="#8">8</a>   <strong>package</strong> <a href="../../../org/dom4j/io/package-summary.html">org.dom4j.io</a>;
<a name="9" href="#9">9</a>   
<a name="10" href="#10">10</a>  <strong>import</strong> java.util.List;
<a name="11" href="#11">11</a>  
<a name="12" href="#12">12</a>  <strong>import</strong> org.dom4j.Attribute;
<a name="13" href="#13">13</a>  <strong>import</strong> org.dom4j.CDATA;
<a name="14" href="#14">14</a>  <strong>import</strong> org.dom4j.Comment;
<a name="15" href="#15">15</a>  <strong>import</strong> org.dom4j.Document;
<a name="16" href="#16">16</a>  <strong>import</strong> org.dom4j.DocumentException;
<a name="17" href="#17">17</a>  <strong>import</strong> org.dom4j.Element;
<a name="18" href="#18">18</a>  <strong>import</strong> org.dom4j.Entity;
<a name="19" href="#19">19</a>  <strong>import</strong> org.dom4j.Namespace;
<a name="20" href="#20">20</a>  <strong>import</strong> org.dom4j.ProcessingInstruction;
<a name="21" href="#21">21</a>  <strong>import</strong> org.dom4j.Text;
<a name="22" href="#22">22</a>  <strong>import</strong> org.dom4j.tree.NamespaceStack;
<a name="23" href="#23">23</a>  
<a name="24" href="#24">24</a>  <strong>import</strong> org.w3c.dom.DOMImplementation;
<a name="25" href="#25">25</a>  
<a name="26" href="#26">26</a>  <em>/**<em>*</em></em>
<a name="27" href="#27">27</a>  <em> * &lt;p></em>
<a name="28" href="#28">28</a>  <em> * &lt;code>DOMWriter&lt;/code> takes a DOM4J tree and outputs it as a W3C DOM</em>
<a name="29" href="#29">29</a>  <em> * object</em>
<a name="30" href="#30">30</a>  <em> * &lt;/p></em>
<a name="31" href="#31">31</a>  <em> * </em>
<a name="32" href="#32">32</a>  <em> * @author &lt;a href="<a href="mailto:james.strachan@metastuff.com" target="alexandria_uri">mailto:james.strachan@metastuff.com</a>">James Strachan &lt;/a></em>
<a name="33" href="#33">33</a>  <em> * @version $Revision: 1.1 $</em>
<a name="34" href="#34">34</a>  <em> */</em>
<a name="35" href="#35">35</a>  <strong>public</strong> <strong>class</strong> <a href="../../../org/dom4j/io/DOMWriter.html">DOMWriter</a> {
<a name="36" href="#36">36</a>      <strong>private</strong> <strong>static</strong> <strong>boolean</strong> loggedWarning = false;
<a name="37" href="#37">37</a>  
<a name="38" href="#38">38</a>      <strong>private</strong> <strong>static</strong> <strong>final</strong> String[] DEFAULT_DOM_DOCUMENT_CLASSES = {
<a name="39" href="#39">39</a>              <span class="string">"org.apache.xerces.dom.DocumentImpl"</span>, <em class="comment">// Xerces</em>
<a name="40" href="#40">40</a>              <span class="string">"gnu.xml.dom.DomDocument"</span>, <em class="comment">// GNU JAXP</em>
<a name="41" href="#41">41</a>              <span class="string">"org.apache.crimson.tree.XmlDocument"</span>, <em class="comment">// Crimson</em>
<a name="42" href="#42">42</a>              <span class="string">"com.sun.xml.tree.XmlDocument"</span>, <em class="comment">// Sun's Project X</em>
<a name="43" href="#43">43</a>              <span class="string">"oracle.xml.parser.v2.XMLDocument"</span>, <em class="comment">// Oracle V2</em>
<a name="44" href="#44">44</a>              <span class="string">"oracle.xml.parser.XMLDocument"</span>, <em class="comment">// Oracle V1</em>
<a name="45" href="#45">45</a>              <span class="string">"org.dom4j.dom.DOMDocument"</span> <em class="comment">// Internal DOM implementation</em>
<a name="46" href="#46">46</a>      };
<a name="47" href="#47">47</a>  
<a name="48" href="#48">48</a>      <em class="comment">// the Class used to create new DOM Document instances</em>
<a name="49" href="#49">49</a>      <strong>private</strong> Class domDocumentClass;
<a name="50" href="#50">50</a>  
<a name="51" href="#51">51</a>      <em>/**<em>* stack of &lt;code>Namespace&lt;/code> objects */</em></em>
<a name="52" href="#52">52</a>      <strong>private</strong> <a href="../../../org/dom4j/tree/NamespaceStack.html">NamespaceStack</a> namespaceStack = <strong>new</strong> <a href="../../../org/dom4j/tree/NamespaceStack.html">NamespaceStack</a>();
<a name="53" href="#53">53</a>  
<a name="54" href="#54">54</a>      <strong>public</strong> <a href="../../../org/dom4j/io/DOMWriter.html">DOMWriter</a>() {
<a name="55" href="#55">55</a>      }
<a name="56" href="#56">56</a>  
<a name="57" href="#57">57</a>      <strong>public</strong> <a href="../../../org/dom4j/io/DOMWriter.html">DOMWriter</a>(Class domDocumentClass) {
<a name="58" href="#58">58</a>          <strong>this</strong>.domDocumentClass = domDocumentClass;
<a name="59" href="#59">59</a>      }
<a name="60" href="#60">60</a>  
<a name="61" href="#61">61</a>      <strong>public</strong> Class getDomDocumentClass() throws DocumentException {
<a name="62" href="#62">62</a>          Class result = domDocumentClass;
<a name="63" href="#63">63</a>  
<a name="64" href="#64">64</a>          <strong>if</strong> (result == <strong>null</strong>) {
<a name="65" href="#65">65</a>              <em class="comment">// lets try and find one in the classpath</em>
<a name="66" href="#66">66</a>              <strong>int</strong> size = DEFAULT_DOM_DOCUMENT_CLASSES.length;
<a name="67" href="#67">67</a>  
<a name="68" href="#68">68</a>              <strong>for</strong> (<strong>int</strong> i = 0; i &lt; size; i++) {
<a name="69" href="#69">69</a>                  <strong>try</strong> {
<a name="70" href="#70">70</a>                      String name = DEFAULT_DOM_DOCUMENT_CLASSES[i];
<a name="71" href="#71">71</a>                      result = Class.forName(name, <strong>true</strong>, DOMWriter.<strong>class</strong>
<a name="72" href="#72">72</a>                              .getClassLoader());
<a name="73" href="#73">73</a>  
<a name="74" href="#74">74</a>                      <strong>if</strong> (result != <strong>null</strong>) {
<a name="75" href="#75">75</a>                          <strong>break</strong>;
<a name="76" href="#76">76</a>                      }
<a name="77" href="#77">77</a>                  } <strong>catch</strong> (Exception e) {
<a name="78" href="#78">78</a>                      <em class="comment">// could not load class correctly</em>
<a name="79" href="#79">79</a>                      <em class="comment">// lets carry on to the next one</em>
<a name="80" href="#80">80</a>                  }
<a name="81" href="#81">81</a>              }
<a name="82" href="#82">82</a>          }
<a name="83" href="#83">83</a>  
<a name="84" href="#84">84</a>          <strong>return</strong> result;
<a name="85" href="#85">85</a>      }
<a name="86" href="#86">86</a>  
<a name="87" href="#87">87</a>      <em>/**<em>*</em></em>
<a name="88" href="#88">88</a>  <em>     * Sets the DOM {@link org.w3c.dom.Document}implementation class used by</em>
<a name="89" href="#89">89</a>  <em>     * the writer when creating DOM documents.</em>
<a name="90" href="#90">90</a>  <em>     * </em>
<a name="91" href="#91">91</a>  <em>     * @param domDocumentClass</em>
<a name="92" href="#92">92</a>  <em>     *            is the Class implementing the {@linkorg.w3c.dom.Document}</em>
<a name="93" href="#93">93</a>  <em>     *            interface</em>
<a name="94" href="#94">94</a>  <em>     */</em>
<a name="95" href="#95">95</a>      <strong>public</strong> <strong>void</strong> setDomDocumentClass(Class domDocumentClass) {
<a name="96" href="#96">96</a>          <strong>this</strong>.domDocumentClass = domDocumentClass;
<a name="97" href="#97">97</a>      }
<a name="98" href="#98">98</a>  
<a name="99" href="#99">99</a>      <em>/**<em>*</em></em>
<a name="100" href="#100">100</a> <em>     * Sets the DOM {@link org.w3c.dom.Document}implementation class name used</em>
<a name="101" href="#101">101</a> <em>     * by the writer when creating DOM documents.</em>
<a name="102" href="#102">102</a> <em>     * </em>
<a name="103" href="#103">103</a> <em>     * @param name</em>
<a name="104" href="#104">104</a> <em>     *            is the name of the Class implementing the {@link</em>
<a name="105" href="#105">105</a> <em>     *            org.w3c.dom.Document} interface</em>
<a name="106" href="#106">106</a> <em>     * </em>
<a name="107" href="#107">107</a> <em>     * @throws DocumentException</em>
<a name="108" href="#108">108</a> <em>     *             if the class could not be loaded</em>
<a name="109" href="#109">109</a> <em>     */</em>
<a name="110" href="#110">110</a>     <strong>public</strong> <strong>void</strong> setDomDocumentClassName(String name) throws DocumentException {
<a name="111" href="#111">111</a>         <strong>try</strong> {
<a name="112" href="#112">112</a>             <strong>this</strong>.domDocumentClass = Class.forName(name, <strong>true</strong>, DOMWriter.<strong>class</strong>
<a name="113" href="#113">113</a>                     .getClassLoader());
<a name="114" href="#114">114</a>         } <strong>catch</strong> (Exception e) {
<a name="115" href="#115">115</a>             <strong>throw</strong> <strong>new</strong> <a href="../../../org/dom4j/DocumentException.html">DocumentException</a>(<span class="string">"Could not load the DOM Document "</span>
<a name="116" href="#116">116</a>                     + <span class="string">"class: "</span> + name, e);
<a name="117" href="#117">117</a>         }
<a name="118" href="#118">118</a>     }
<a name="119" href="#119">119</a> 
<a name="120" href="#120">120</a>     <strong>public</strong> org.w3c.dom.Document write(<a href="../../../org/dom4j/Document.html">Document</a> document)
<a name="121" href="#121">121</a>             throws <a href="../../../org/dom4j/DocumentException.html">DocumentException</a> {
<a name="122" href="#122">122</a>         <strong>if</strong> (document instanceof org.w3c.dom.Document) {
<a name="123" href="#123">123</a>             <strong>return</strong> (org.w3c.dom.Document) document;
<a name="124" href="#124">124</a>         }
<a name="125" href="#125">125</a> 
<a name="126" href="#126">126</a>         resetNamespaceStack();
<a name="127" href="#127">127</a> 
<a name="128" href="#128">128</a>         org.w3c.dom.Document domDocument = createDomDocument(document);
<a name="129" href="#129">129</a>         appendDOMTree(domDocument, domDocument, document.content());
<a name="130" href="#130">130</a>         namespaceStack.clear();
<a name="131" href="#131">131</a> 
<a name="132" href="#132">132</a>         <strong>return</strong> domDocument;
<a name="133" href="#133">133</a>     }
<a name="134" href="#134">134</a> 
<a name="135" href="#135">135</a>     <strong>public</strong> org.w3c.dom.Document write(<a href="../../../org/dom4j/Document.html">Document</a> document,
<a name="136" href="#136">136</a>             org.w3c.dom.DOMImplementation domImpl) throws DocumentException {
<a name="137" href="#137">137</a>         <strong>if</strong> (document instanceof org.w3c.dom.Document) {
<a name="138" href="#138">138</a>             <strong>return</strong> (org.w3c.dom.Document) document;
<a name="139" href="#139">139</a>         }
<a name="140" href="#140">140</a> 
<a name="141" href="#141">141</a>         resetNamespaceStack();
<a name="142" href="#142">142</a> 
<a name="143" href="#143">143</a>         org.w3c.dom.Document domDocument = createDomDocument(document, domImpl);
<a name="144" href="#144">144</a>         appendDOMTree(domDocument, domDocument, document.content());
<a name="145" href="#145">145</a>         namespaceStack.clear();
<a name="146" href="#146">146</a> 
<a name="147" href="#147">147</a>         <strong>return</strong> domDocument;
<a name="148" href="#148">148</a>     }
<a name="149" href="#149">149</a> 
<a name="150" href="#150">150</a>     <strong>protected</strong> <strong>void</strong> appendDOMTree(org.w3c.dom.Document domDocument,
<a name="151" href="#151">151</a>             org.w3c.dom.Node domCurrent, List content) {
<a name="152" href="#152">152</a>         <strong>int</strong> size = content.size();
<a name="153" href="#153">153</a> 
<a name="154" href="#154">154</a>         <strong>for</strong> (<strong>int</strong> i = 0; i &lt; size; i++) {
<a name="155" href="#155">155</a>             Object object = content.get(i);
<a name="156" href="#156">156</a> 
<a name="157" href="#157">157</a>             <strong>if</strong> (object instanceof Element) {
<a name="158" href="#158">158</a>                 appendDOMTree(domDocument, domCurrent, (Element) object);
<a name="159" href="#159">159</a>             } <strong>else</strong> <strong>if</strong> (object instanceof String) {
<a name="160" href="#160">160</a>                 appendDOMTree(domDocument, domCurrent, (String) object);
<a name="161" href="#161">161</a>             } <strong>else</strong> <strong>if</strong> (object instanceof Text) {
<a name="162" href="#162">162</a>                 <a href="../../../org/dom4j/Text.html">Text</a> text = (Text) object;
<a name="163" href="#163">163</a>                 appendDOMTree(domDocument, domCurrent, text.getText());
<a name="164" href="#164">164</a>             } <strong>else</strong> <strong>if</strong> (object instanceof CDATA) {
<a name="165" href="#165">165</a>                 appendDOMTree(domDocument, domCurrent, (CDATA) object);
<a name="166" href="#166">166</a>             } <strong>else</strong> <strong>if</strong> (object instanceof Comment) {
<a name="167" href="#167">167</a>                 appendDOMTree(domDocument, domCurrent, (Comment) object);
<a name="168" href="#168">168</a>             } <strong>else</strong> <strong>if</strong> (object instanceof Entity) {
<a name="169" href="#169">169</a>                 appendDOMTree(domDocument, domCurrent, (Entity) object);
<a name="170" href="#170">170</a>             } <strong>else</strong> <strong>if</strong> (object instanceof ProcessingInstruction) {
<a name="171" href="#171">171</a>                 appendDOMTree(domDocument, domCurrent,
<a name="172" href="#172">172</a>                         (<a href="../../../org/dom4j/ProcessingInstruction.html">ProcessingInstruction</a>) object);
<a name="173" href="#173">173</a>             }
<a name="174" href="#174">174</a>         }
<a name="175" href="#175">175</a>     }
<a name="176" href="#176">176</a> 
<a name="177" href="#177">177</a>     <strong>protected</strong> <strong>void</strong> appendDOMTree(org.w3c.dom.Document domDocument,
<a name="178" href="#178">178</a>             org.w3c.dom.Node domCurrent, <a href="../../../org/dom4j/Element.html">Element</a> element) {
<a name="179" href="#179">179</a>         String elUri = element.getNamespaceURI();
<a name="180" href="#180">180</a>         String elName = element.getQualifiedName();
<a name="181" href="#181">181</a>         org.w3c.dom.Element domElement = domDocument.createElementNS(elUri,
<a name="182" href="#182">182</a>                 elName);
<a name="183" href="#183">183</a> 
<a name="184" href="#184">184</a>         <strong>int</strong> stackSize = namespaceStack.size();
<a name="185" href="#185">185</a> 
<a name="186" href="#186">186</a>         <em class="comment">// add the namespace of the element first</em>
<a name="187" href="#187">187</a>         <a href="../../../org/dom4j/Namespace.html">Namespace</a> elementNamespace = element.getNamespace();
<a name="188" href="#188">188</a> 
<a name="189" href="#189">189</a>         <strong>if</strong> (isNamespaceDeclaration(elementNamespace)) {
<a name="190" href="#190">190</a>             namespaceStack.push(elementNamespace);
<a name="191" href="#191">191</a>             writeNamespace(domElement, elementNamespace);
<a name="192" href="#192">192</a>         }
<a name="193" href="#193">193</a> 
<a name="194" href="#194">194</a>         <em class="comment">// add the additional declared namespaces</em>
<a name="195" href="#195">195</a>         List declaredNamespaces = element.declaredNamespaces();
<a name="196" href="#196">196</a> 
<a name="197" href="#197">197</a>         <strong>for</strong> (<strong>int</strong> i = 0, size = declaredNamespaces.size(); i &lt; size; i++) {
<a name="198" href="#198">198</a>             <a href="../../../org/dom4j/Namespace.html">Namespace</a> namespace = (Namespace) declaredNamespaces.get(i);
<a name="199" href="#199">199</a> 
<a name="200" href="#200">200</a>             <strong>if</strong> (isNamespaceDeclaration(namespace)) {
<a name="201" href="#201">201</a>                 namespaceStack.push(namespace);
<a name="202" href="#202">202</a>                 writeNamespace(domElement, namespace);
<a name="203" href="#203">203</a>             }
<a name="204" href="#204">204</a>         }
<a name="205" href="#205">205</a> 
<a name="206" href="#206">206</a>         <em class="comment">// add the attributes</em>
<a name="207" href="#207">207</a>         <strong>for</strong> (<strong>int</strong> i = 0, size = element.attributeCount(); i &lt; size; i++) {
<a name="208" href="#208">208</a>             <a href="../../../org/dom4j/Attribute.html">Attribute</a> attribute = (Attribute) element.attribute(i);
<a name="209" href="#209">209</a>             String attUri = attribute.getNamespaceURI();
<a name="210" href="#210">210</a>             String attName = attribute.getQualifiedName();
<a name="211" href="#211">211</a>             String value = attribute.getValue();
<a name="212" href="#212">212</a>             domElement.setAttributeNS(attUri, attName, value);
<a name="213" href="#213">213</a>         }
<a name="214" href="#214">214</a> 
<a name="215" href="#215">215</a>         <em class="comment">// add content</em>
<a name="216" href="#216">216</a>         appendDOMTree(domDocument, domElement, element.content());
<a name="217" href="#217">217</a> 
<a name="218" href="#218">218</a>         domCurrent.appendChild(domElement);
<a name="219" href="#219">219</a> 
<a name="220" href="#220">220</a>         <strong>while</strong> (namespaceStack.size() > stackSize) {
<a name="221" href="#221">221</a>             namespaceStack.pop();
<a name="222" href="#222">222</a>         }
<a name="223" href="#223">223</a>     }
<a name="224" href="#224">224</a> 
<a name="225" href="#225">225</a>     <strong>protected</strong> <strong>void</strong> appendDOMTree(org.w3c.dom.Document domDocument,
<a name="226" href="#226">226</a>             org.w3c.dom.Node domCurrent, <a href="../../../org/dom4j/CDATA.html">CDATA</a> cdata) {
<a name="227" href="#227">227</a>         org.w3c.dom.CDATASection domCDATA = domDocument
<a name="228" href="#228">228</a>                 .createCDATASection(cdata.getText());
<a name="229" href="#229">229</a>         domCurrent.appendChild(domCDATA);
<a name="230" href="#230">230</a>     }
<a name="231" href="#231">231</a> 
<a name="232" href="#232">232</a>     <strong>protected</strong> <strong>void</strong> appendDOMTree(org.w3c.dom.Document domDocument,
<a name="233" href="#233">233</a>             org.w3c.dom.Node domCurrent, <a href="../../../org/dom4j/Comment.html">Comment</a> comment) {
<a name="234" href="#234">234</a>         org.w3c.dom.Comment domComment = domDocument.createComment(comment
<a name="235" href="#235">235</a>                 .getText());
<a name="236" href="#236">236</a>         domCurrent.appendChild(domComment);
<a name="237" href="#237">237</a>     }
<a name="238" href="#238">238</a> 
<a name="239" href="#239">239</a>     <strong>protected</strong> <strong>void</strong> appendDOMTree(org.w3c.dom.Document domDocument,
<a name="240" href="#240">240</a>             org.w3c.dom.Node domCurrent, String text) {
<a name="241" href="#241">241</a>         org.w3c.dom.Text domText = domDocument.createTextNode(text);
<a name="242" href="#242">242</a>         domCurrent.appendChild(domText);
<a name="243" href="#243">243</a>     }
<a name="244" href="#244">244</a> 
<a name="245" href="#245">245</a>     <strong>protected</strong> <strong>void</strong> appendDOMTree(org.w3c.dom.Document domDocument,
<a name="246" href="#246">246</a>             org.w3c.dom.Node domCurrent, <a href="../../../org/dom4j/Entity.html">Entity</a> entity) {
<a name="247" href="#247">247</a>         org.w3c.dom.EntityReference domEntity = domDocument
<a name="248" href="#248">248</a>                 .createEntityReference(entity.getName());
<a name="249" href="#249">249</a>         domCurrent.appendChild(domEntity);
<a name="250" href="#250">250</a>     }
<a name="251" href="#251">251</a> 
<a name="252" href="#252">252</a>     <strong>protected</strong> <strong>void</strong> appendDOMTree(org.w3c.dom.Document domDoc,
<a name="253" href="#253">253</a>             org.w3c.dom.Node domCurrent, <a href="../../../org/dom4j/ProcessingInstruction.html">ProcessingInstruction</a> pi) {
<a name="254" href="#254">254</a>         org.w3c.dom.ProcessingInstruction domPI = domDoc
<a name="255" href="#255">255</a>                 .createProcessingInstruction(pi.getTarget(), pi.getText());
<a name="256" href="#256">256</a>         domCurrent.appendChild(domPI);
<a name="257" href="#257">257</a>     }
<a name="258" href="#258">258</a> 
<a name="259" href="#259">259</a>     <strong>protected</strong> <strong>void</strong> writeNamespace(org.w3c.dom.Element domElement,
<a name="260" href="#260">260</a>             <a href="../../../org/dom4j/Namespace.html">Namespace</a> namespace) {
<a name="261" href="#261">261</a>         String attributeName = attributeNameForNamespace(namespace);
<a name="262" href="#262">262</a> 
<a name="263" href="#263">263</a>         <em class="comment">// domElement.setAttributeNS("", attributeName, namespace.getURI());</em>
<a name="264" href="#264">264</a>         domElement.setAttribute(attributeName, namespace.getURI());
<a name="265" href="#265">265</a>     }
<a name="266" href="#266">266</a> 
<a name="267" href="#267">267</a>     <strong>protected</strong> String attributeNameForNamespace(<a href="../../../org/dom4j/Namespace.html">Namespace</a> namespace) {
<a name="268" href="#268">268</a>         String xmlns = <span class="string">"xmlns"</span>;
<a name="269" href="#269">269</a>         String prefix = namespace.getPrefix();
<a name="270" href="#270">270</a> 
<a name="271" href="#271">271</a>         <strong>if</strong> (prefix.length() > 0) {
<a name="272" href="#272">272</a>             <strong>return</strong> xmlns + <span class="string">":"</span> + prefix;
<a name="273" href="#273">273</a>         }
<a name="274" href="#274">274</a> 
<a name="275" href="#275">275</a>         <strong>return</strong> xmlns;
<a name="276" href="#276">276</a>     }
<a name="277" href="#277">277</a> 
<a name="278" href="#278">278</a>     <strong>protected</strong> org.w3c.dom.Document createDomDocument(<a href="../../../org/dom4j/Document.html">Document</a> document)
<a name="279" href="#279">279</a>             throws <a href="../../../org/dom4j/DocumentException.html">DocumentException</a> {
<a name="280" href="#280">280</a>         org.w3c.dom.Document result = <strong>null</strong>;
<a name="281" href="#281">281</a> 
<a name="282" href="#282">282</a>         <em class="comment">// use the given domDocumentClass (if not null)</em>
<a name="283" href="#283">283</a>         <strong>if</strong> (domDocumentClass != <strong>null</strong>) {
<a name="284" href="#284">284</a>             <strong>try</strong> {
<a name="285" href="#285">285</a>                 result = (org.w3c.dom.Document) domDocumentClass.newInstance();
<a name="286" href="#286">286</a>             } <strong>catch</strong> (Exception e) {
<a name="287" href="#287">287</a>                 <strong>throw</strong> <strong>new</strong> <a href="../../../org/dom4j/DocumentException.html">DocumentException</a>(
<a name="288" href="#288">288</a>                         <span class="string">"Could not instantiate an instance "</span>
<a name="289" href="#289">289</a>                                 + <span class="string">"of DOM Document with class: "</span>
<a name="290" href="#290">290</a>                                 + domDocumentClass.getName(), e);
<a name="291" href="#291">291</a>             }
<a name="292" href="#292">292</a>         } <strong>else</strong> {
<a name="293" href="#293">293</a>             <em class="comment">// lets try JAXP first before using the hardcoded default parsers</em>
<a name="294" href="#294">294</a>             result = createDomDocumentViaJAXP();
<a name="295" href="#295">295</a> 
<a name="296" href="#296">296</a>             <strong>if</strong> (result == <strong>null</strong>) {
<a name="297" href="#297">297</a>                 Class theClass = getDomDocumentClass();
<a name="298" href="#298">298</a> 
<a name="299" href="#299">299</a>                 <strong>try</strong> {
<a name="300" href="#300">300</a>                     result = (org.w3c.dom.Document) theClass.newInstance();
<a name="301" href="#301">301</a>                 } <strong>catch</strong> (Exception e) {
<a name="302" href="#302">302</a>                     <strong>throw</strong> <strong>new</strong> <a href="../../../org/dom4j/DocumentException.html">DocumentException</a>(<span class="string">"Could not instantiate an "</span>
<a name="303" href="#303">303</a>                             + <span class="string">"instance of DOM Document "</span> + <span class="string">"with class: "</span>
<a name="304" href="#304">304</a>                             + theClass.getName(), e);
<a name="305" href="#305">305</a>                 }
<a name="306" href="#306">306</a>             }
<a name="307" href="#307">307</a>         }
<a name="308" href="#308">308</a> 
<a name="309" href="#309">309</a>         <strong>return</strong> result;
<a name="310" href="#310">310</a>     }
<a name="311" href="#311">311</a> 
<a name="312" href="#312">312</a>     <strong>protected</strong> org.w3c.dom.Document createDomDocumentViaJAXP()
<a name="313" href="#313">313</a>             throws <a href="../../../org/dom4j/DocumentException.html">DocumentException</a> {
<a name="314" href="#314">314</a>         <strong>try</strong> {
<a name="315" href="#315">315</a>             <strong>return</strong> JAXPHelper.createDocument(false, <strong>true</strong>);
<a name="316" href="#316">316</a>         } <strong>catch</strong> (Throwable e) {
<a name="317" href="#317">317</a>             <strong>if</strong> (!loggedWarning) {
<a name="318" href="#318">318</a>                 loggedWarning = <strong>true</strong>;
<a name="319" href="#319">319</a> 
<a name="320" href="#320">320</a>                 <strong>if</strong> (SAXHelper.isVerboseErrorReporting()) {
<a name="321" href="#321">321</a>                     <em class="comment">// log all exceptions as warnings and carry</em>
<a name="322" href="#322">322</a>                     <em class="comment">// on as we have a default SAX parser we can use</em>
<a name="323" href="#323">323</a>                     System.out.println(<span class="string">"Warning: Caught exception attempting "</span>
<a name="324" href="#324">324</a>                             + <span class="string">"to use JAXP to create a W3C DOM "</span> + <span class="string">"document"</span>);
<a name="325" href="#325">325</a>                     System.out.println(<span class="string">"Warning: Exception was: "</span> + e);
<a name="326" href="#326">326</a>                     e.printStackTrace();
<a name="327" href="#327">327</a>                 } <strong>else</strong> {
<a name="328" href="#328">328</a>                     System.out.println(<span class="string">"Warning: Error occurred using JAXP to "</span>
<a name="329" href="#329">329</a>                             + <span class="string">"create a DOM document."</span>);
<a name="330" href="#330">330</a>                 }
<a name="331" href="#331">331</a>             }
<a name="332" href="#332">332</a>         }
<a name="333" href="#333">333</a> 
<a name="334" href="#334">334</a>         <strong>return</strong> <strong>null</strong>;
<a name="335" href="#335">335</a>     }
<a name="336" href="#336">336</a> 
<a name="337" href="#337">337</a>     <strong>protected</strong> org.w3c.dom.Document createDomDocument(<a href="../../../org/dom4j/Document.html">Document</a> document,
<a name="338" href="#338">338</a>             DOMImplementation domImpl) throws DocumentException {
<a name="339" href="#339">339</a>         String namespaceURI = <strong>null</strong>;
<a name="340" href="#340">340</a>         String qualifiedName = <strong>null</strong>;
<a name="341" href="#341">341</a>         org.w3c.dom.DocumentType docType = <strong>null</strong>;
<a name="342" href="#342">342</a> 
<a name="343" href="#343">343</a>         <strong>return</strong> domImpl.createDocument(namespaceURI, qualifiedName, docType);
<a name="344" href="#344">344</a>     }
<a name="345" href="#345">345</a> 
<a name="346" href="#346">346</a>     <strong>protected</strong> <strong>boolean</strong> isNamespaceDeclaration(<a href="../../../org/dom4j/Namespace.html">Namespace</a> ns) {
<a name="347" href="#347">347</a>         <strong>if</strong> ((ns != <strong>null</strong>) &amp;&amp; (ns != Namespace.NO_NAMESPACE)
<a name="348" href="#348">348</a>                 &amp;&amp; (ns != Namespace.XML_NAMESPACE)) {
<a name="349" href="#349">349</a>             String uri = ns.getURI();
<a name="350" href="#350">350</a> 
<a name="351" href="#351">351</a>             <strong>if</strong> ((uri != <strong>null</strong>) &amp;&amp; (uri.length() > 0)) {
<a name="352" href="#352">352</a>                 <strong>if</strong> (!namespaceStack.contains(ns)) {
<a name="353" href="#353">353</a>                     <strong>return</strong> <strong>true</strong>;
<a name="354" href="#354">354</a>                 }
<a name="355" href="#355">355</a>             }
<a name="356" href="#356">356</a>         }
<a name="357" href="#357">357</a> 
<a name="358" href="#358">358</a>         <strong>return</strong> false;
<a name="359" href="#359">359</a>     }
<a name="360" href="#360">360</a> 
<a name="361" href="#361">361</a>     <strong>protected</strong> <strong>void</strong> resetNamespaceStack() {
<a name="362" href="#362">362</a>         namespaceStack.clear();
<a name="363" href="#363">363</a>         namespaceStack.push(Namespace.XML_NAMESPACE);
<a name="364" href="#364">364</a>     }
<a name="365" href="#365">365</a> }
<a name="366" href="#366">366</a> 
<a name="367" href="#367">367</a> <em class="comment">/*</em>
<a name="368" href="#368">368</a> <em class="comment"> * Redistribution and use of this software and associated documentation</em>
<a name="369" href="#369">369</a> <em class="comment"> * ("Software"), with or without modification, are permitted provided that the</em>
<a name="370" href="#370">370</a> <em class="comment"> * following conditions are met:</em>
<a name="371" href="#371">371</a> <em class="comment"> * </em>
<a name="372" href="#372">372</a> <em class="comment"> * 1. Redistributions of source code must retain copyright statements and</em>
<a name="373" href="#373">373</a> <em class="comment"> * notices. Redistributions must also contain a copy of this document.</em>
<a name="374" href="#374">374</a> <em class="comment"> * </em>
<a name="375" href="#375">375</a> <em class="comment"> * 2. Redistributions in binary form must reproduce the above copyright notice,</em>
<a name="376" href="#376">376</a> <em class="comment"> * this list of conditions and the following disclaimer in the documentation</em>
<a name="377" href="#377">377</a> <em class="comment"> * and/or other materials provided with the distribution.</em>
<a name="378" href="#378">378</a> <em class="comment"> * </em>
<a name="379" href="#379">379</a> <em class="comment"> * 3. The name "DOM4J" must not be used to endorse or promote products derived</em>
<a name="380" href="#380">380</a> <em class="comment"> * from this Software without prior written permission of MetaStuff, Ltd. For</em>
<a name="381" href="#381">381</a> <em class="comment"> * written permission, please contact dom4j-info@metastuff.com.</em>
<a name="382" href="#382">382</a> <em class="comment"> * </em>
<a name="383" href="#383">383</a> <em class="comment"> * 4. Products derived from this Software may not be called "DOM4J" nor may</em>
<a name="384" href="#384">384</a> <em class="comment"> * "DOM4J" appear in their names without prior written permission of MetaStuff,</em>
<a name="385" href="#385">385</a> <em class="comment"> * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.</em>
<a name="386" href="#386">386</a> <em class="comment"> * </em>
<a name="387" href="#387">387</a> <em class="comment"> * 5. Due credit should be given to the DOM4J Project - <a href="http://www.dom4j.org" target="alexandria_uri">http://www.dom4j.org</a></em>
<a name="388" href="#388">388</a> <em class="comment"> * </em>
<a name="389" href="#389">389</a> <em class="comment"> * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND</em>
<a name="390" href="#390">390</a> <em class="comment"> * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</em>
<a name="391" href="#391">391</a> <em class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</em>
<a name="392" href="#392">392</a> <em class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE</em>
<a name="393" href="#393">393</a> <em class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</em>
<a name="394" href="#394">394</a> <em class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</em>
<a name="395" href="#395">395</a> <em class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</em>
<a name="396" href="#396">396</a> <em class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</em>
<a name="397" href="#397">397</a> <em class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</em>
<a name="398" href="#398">398</a> <em class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</em>
<a name="399" href="#399">399</a> <em class="comment"> * POSSIBILITY OF SUCH DAMAGE.</em>
<a name="400" href="#400">400</a> <em class="comment"> * </em>
<a name="401" href="#401">401</a> <em class="comment"> * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.</em>
<a name="402" href="#402">402</a> <em class="comment"> */</em>
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>





See more files for this project here

PeerWriter

PeerWriter is a collaborative text editor. Multiple peers can edit the same document while they see overall changes in real-time. PeerWriter is based on a decentralized infrastructure, using a non-locking concurrency protocol ensuring global consistency.

Project homepage: http://sourceforge.net/projects/peerwriter
Programming language(s): Java,XML
License: gpl2

  DOMReader.html
  DOMWriter.html
  DispatchHandler.html
  DocumentInputSource.html
  DocumentResult.html
  DocumentSource.html
  ElementModifier.html
  ElementStack.html
  HTMLWriter.html
  JAXPHelper.html
  OutputFormat.html
  PruningDispatchHandler.html
  PruningElementStack.html
  SAXContentHandler.html
  SAXEventRecorder.html
  SAXHelper.html
  SAXModifier.html
  SAXModifyContentHandler.html
  SAXModifyElementHandler.html
  SAXModifyException.html
  SAXModifyReader.html
  SAXReader.html
  SAXValidator.html
  SAXWriter.html
  STAXEventReader.html
  STAXEventWriter.html
  XMLResult.html
  XMLWriter.html
  XPP3Reader.html
  XPPReader.html
  package-frame.html
  package-summary.html