<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>fqtrnt</title>
    <description></description>
    <link>http://fqtrnt.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>关于在DOM4J在读取XML文件时，解释DTD的问题</title>
        <author>fqtrnt</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fqtrnt.javaeye.com">fqtrnt</a>&nbsp;
          链接：<a href="http://fqtrnt.javaeye.com/blog/97841" style="color:red;">http://fqtrnt.javaeye.com/blog/97841</a>&nbsp;
          发表时间: 2007年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal"><span style="font-family: 宋体-18030;">近日在使用 </span><span new="" courier="" lang="EN-US" style="">DOM4J</span><span style="font-family: 宋体;"></span><span style="font-family: 宋体-18030;"> 的时候，遇到一个问题，现在有两个解决方法，先记下来，以便日后使用。</span></p>
<p class="MsoNormal">问题：对一个 XML 文件进行读写操作，但是发现当文件存在的时候，使用DOM4J读进来的时候，生成的 Document 对象会根据 DTD 里的定义，追加了一些 default 属性（实际不需要）。而且在读取的时间被延长。<span style="font-family: 宋体-18030;"></span></p>
<br />
<p class="MsoNormal"><span style="font-family: 宋体-18030;">有一个</span><span new="" courier="" lang="EN-US" style=""> XML</span><span style="font-family: 宋体-18030;"> 文件如下：</span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;!DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;&quot;-//SPRING//DTD&nbsp;BEAN//EN&quot;&nbsp;&quot;http://www.springframework.org/dtd/spring-beans.dtd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;....&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p class="MsoNormal"><span style="font-family: 宋体;">使用</span><span new="" courier="" lang="EN-US" style=""> DOM4J</span><span style="font-family: 宋体;"> 的读取文件的一般性写法：</span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>SAXReader&nbsp;reader&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SAXReader(</span><span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>document&nbsp;=&nbsp;reader.read(file);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>root&nbsp;=&nbsp;document.getRootElement();&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<p class="MsoNormal"><span style="font-family: 宋体;">对象</span><span new="" courier="" lang="EN-US" style=""> document</span><span style="font-family: 宋体;"> 里的节点会被自动追加 </span><span new="" courier="" lang="EN-US" style="">DTD</span><span style="font-family: 宋体;"> 里的定义的</span><span new="" courier="" lang="EN-US" style=""> default</span><span style="font-family: 宋体;"> 属性，只有新增加的节点不受影响，如下。而且，如果文件的操作时间被延长。</span></p>
<p class="MsoNormal">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;!DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;&quot;-//SPRING//DTD&nbsp;BEAN//EN&quot;&nbsp;&quot;http://www.springframework.org/dtd/spring-beans.dtd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;</span><span class="attribute">default-lazy-init</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">default-autowire</span><span>=</span><span class="attribute-value">&quot;no&quot;</span><span>&nbsp;</span><span class="attribute">default-dependency-check</span><span>=</span><span class="attribute-value">&quot;none&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">lazy-init</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">autowire</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span>&nbsp;</span><span class="attribute">dependency-check</span><span>=</span><span class="attribute-value">&quot;default&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;OperateXmlByDom4jTestCase&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;test.OperateXmlByDom4jTestCase&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<span style="font-family: 宋体;"></span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">为了不让生成我们不需要的</span><span new="" courier="" lang="EN-US" style=""> default </span><span style="font-family: 宋体;"></span><span style="font-family: 宋体;">属性和缩短文件的操作时间，我们可以调用</span><span new="" courier="" lang="EN-US" style=""> SAXReader.</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;">setFeature </span><span style="font-size: 10pt; font-family: 宋体; color: black;">方法来改变</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"> DOM4J</span><span style="font-size: 10pt; font-family: 宋体; color: black;"> 的行为，片断代码如下：</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">//&nbsp;http://apache.org/xml/features/nonvalidating/load-external-dtd&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>saxReader.setFeature(&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Constants.XERCES_FEATURE_PREFIX&nbsp;+&nbsp;Constants.LOAD_EXTERNAL_DTD_FEATURE,&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 宋体;">关于更多的</span><span new="" courier="" lang="EN-US" style="font-size: 9pt;"> Feature</span><span style="font-size: 9pt; font-family: 宋体;"> 请参考</span><strong style=""><span new="" courier="" color:="" lang="EN-US" style="font-size: 9pt;"> <a href="http://kickjava.com/src/com/sun/org/apache/xerces/internal/impl/Constants.java.htm">com.sun.org.apache.xerces.internal.impl.Constants</a><o:p></o:p></span></strong></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 宋体;">以下为片断代码：</span><span new="" courier="" lang="EN-US" style="font-size: 9pt;"><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">//&nbsp;xerces&nbsp;features</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Xerces&nbsp;features&nbsp;prefix&nbsp;(&quot;http://apache.org/xml/features/&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;XERCES_FEATURE_PREFIX&nbsp;=&nbsp;</span><span class="string">&quot;http://apache.org/xml/features/&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Schema&nbsp;validation&nbsp;feature&nbsp;(&quot;validation/schema&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_VALIDATION_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Expose&nbsp;schema&nbsp;normalized&nbsp;values&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_NORMALIZED_VALUE&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema/normalized-value&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Send&nbsp;schema&nbsp;default&nbsp;value&nbsp;via&nbsp;characters()&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_ELEMENT_DEFAULT&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema/element-default&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Schema&nbsp;full&nbsp;constraint&nbsp;checking&nbsp;(&quot;validation/schema-full-checking&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_FULL_CHECKING&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema-full-checking&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Augment&nbsp;Post-Schema-Validation-Infoset&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;SCHEMA_AUGMENT_PSVI&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema/augment-psvi&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Dynamic&nbsp;validation&nbsp;feature&nbsp;(&quot;validation/dynamic&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;DYNAMIC_VALIDATION_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/dynamic&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Warn&nbsp;on&nbsp;duplicate&nbsp;attribute&nbsp;declaration&nbsp;feature&nbsp;(&quot;validation/warn-on-duplicate-attdef&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;WARN_ON_DUPLICATE_ATTDEF_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/warn-on-duplicate-attdef&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Warn&nbsp;on&nbsp;undeclared&nbsp;element&nbsp;feature&nbsp;(&quot;validation/warn-on-undeclared-elemdef&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;WARN_ON_UNDECLARED_ELEMDEF_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/warn-on-undeclared-elemdef&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Warn&nbsp;on&nbsp;duplicate&nbsp;entity&nbsp;declaration&nbsp;feature&nbsp;(&quot;warn-on-duplicate-entitydef&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;WARN_ON_DUPLICATE_ENTITYDEF_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;warn-on-duplicate-entitydef&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Allow&nbsp;Java&nbsp;encoding&nbsp;names&nbsp;feature&nbsp;(&quot;allow-java-encodings&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;ALLOW_JAVA_ENCODINGS_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;allow-java-encodings&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Disallow&nbsp;DOCTYPE&nbsp;declaration&nbsp;feature&nbsp;(&quot;disallow-doctype-decl&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;DISALLOW_DOCTYPE_DECL_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;disallow-doctype-decl&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Continue&nbsp;after&nbsp;fatal&nbsp;error&nbsp;feature&nbsp;(&quot;continue-after-fatal-error&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;CONTINUE_AFTER_FATAL_ERROR_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;continue-after-fatal-error&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Load&nbsp;dtd&nbsp;grammar&nbsp;when&nbsp;nonvalidating&nbsp;feature&nbsp;(&quot;nonvalidating/load-dtd-grammar&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;LOAD_DTD_GRAMMAR_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;nonvalidating/load-dtd-grammar&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Load&nbsp;external&nbsp;dtd&nbsp;when&nbsp;nonvalidating&nbsp;feature&nbsp;(&quot;nonvalidating/load-external-dtd&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;LOAD_EXTERNAL_DTD_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;nonvalidating/load-external-dtd&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Defer&nbsp;node&nbsp;expansion&nbsp;feature&nbsp;(&quot;dom/defer-node-expansion&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;DEFER_NODE_EXPANSION_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;dom/defer-node-expansion&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Create&nbsp;entity&nbsp;reference&nbsp;nodes&nbsp;feature&nbsp;(&quot;dom/create-entity-ref-nodes&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;CREATE_ENTITY_REF_NODES_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;dom/create-entity-ref-nodes&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Include&nbsp;ignorable&nbsp;whitespace&nbsp;feature&nbsp;(&quot;dom/include-ignorable-whitespace&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;INCLUDE_IGNORABLE_WHITESPACE&nbsp;=&nbsp;</span><span class="string">&quot;dom/include-ignorable-whitespace&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Default&nbsp;attribute&nbsp;values&nbsp;feature&nbsp;(&quot;validation/default-attribute-values&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;DEFAULT_ATTRIBUTE_VALUES_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/default-attribute-values&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Validate&nbsp;content&nbsp;models&nbsp;feature&nbsp;(&quot;validation/validate-content-models&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;VALIDATE_CONTENT_MODELS_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/validate-content-models&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Validate&nbsp;datatypes&nbsp;feature&nbsp;(&quot;validation/validate-datatypes&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;VALIDATE_DATATYPES_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;validation/validate-datatypes&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Notify&nbsp;character&nbsp;references&nbsp;feature&nbsp;(scanner/notify-char-refs&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;NOTIFY_CHAR_REFS_FEATURE&nbsp;=&nbsp;&quot;scanner/notify-</span><span class="keyword">char</span><span>-refs</span><span class="string">&quot;;</span>&nbsp;</span></li>
    <li class=""><span><span class="string"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">/**&nbsp;Notify&nbsp;built-in&nbsp;(&amp;,&nbsp;etc.)&nbsp;references&nbsp;feature&nbsp;(scanner/notify-builtin-refs&quot;</span><span>).&nbsp;*/&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;NOTIFY_BUILTIN_REFS_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;scanner/notify-builtin-refs&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Standard&nbsp;URI&nbsp;conformant&nbsp;feature&nbsp;(&quot;standard-uri-conformant&quot;).&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;STANDARD_URI_CONFORMANT_FEATURE&nbsp;=&nbsp;</span><span class="string">&quot;standard-uri-conformant&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Internal&nbsp;performance&nbsp;related&nbsp;feature:&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;false&nbsp;-&nbsp;the&nbsp;parser&nbsp;settings&nbsp;(features/properties)&nbsp;have&nbsp;not&nbsp;changed&nbsp;between&nbsp;2&nbsp;parses</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;true&nbsp;-&nbsp;the&nbsp;parser&nbsp;settings&nbsp;have&nbsp;changed&nbsp;between&nbsp;2&nbsp;parses&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;NOTE:&nbsp;this&nbsp;feature&nbsp;should&nbsp;only&nbsp;be&nbsp;set&nbsp;by&nbsp;the&nbsp;parser&nbsp;configuration.</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;PARSER_SETTINGS&nbsp;=&nbsp;</span><span class="string">&quot;internal/parser-settings&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**&nbsp;Feature&nbsp;to&nbsp;make&nbsp;XML&nbsp;Processor&nbsp;XInclude&nbsp;Aware&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;XINCLUDE_AWARE&nbsp;=&nbsp;</span><span class="string">&quot;xinclude-aware&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">/**&nbsp;Ignore&nbsp;xsi:schemaLocation&nbsp;and&nbsp;xsi:noNamespaceSchemaLocation.&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;IGNORE_SCHEMA_LOCATION_HINTS&nbsp;=&nbsp;</span><span class="string">&quot;validation/schema/ignore-schema-location-hints&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;When&nbsp;true,&nbsp;the&nbsp;schema&nbsp;processor&nbsp;will&nbsp;change&nbsp;characters&nbsp;events</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;to&nbsp;ignorableWhitespaces&nbsp;events,&nbsp;when&nbsp;characters&nbsp;are&nbsp;expected&nbsp;to</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;only&nbsp;contain&nbsp;ignorable&nbsp;whitespaces.</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;CHANGE_IGNORABLE_CHARACTERS_INTO_IGNORABLE_WHITESPACES&nbsp;=&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;validation/change-ignorable-characters-into-ignorable-whitespaces&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<p class="MsoNormal"><span style="font-family: 宋体;">除通过上面的</span><span new="" courier="" lang="EN-US" style=""> SAXReader.</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;">setFeature</span><span style="font-size: 10pt; font-family: 宋体; color: black;"> 文件之外</span><span new="" courier="" color:="" style="font-size: 10pt;"> </span><span style="font-size: 10pt; font-family: 宋体; color: black;">，我们还可以通过自己的</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"> EntityResolver </span><span style="font-size: 10pt; font-family: 宋体; color: black;">来解决这个问题。</span><span new="" courier="" color:="" lang="EN-US" style="font-size: 10pt;"><o:p></o:p></span></p>
<p class="MsoNormal"><span new="" courier="" lang="EN-US" style="">PS</span><span style="font-family: 宋体;">：这个方法是从<a href="http://blog.csdn.net/lessoft/archive/2007/06/20/1659579.aspx"><span style="color: blue;">凝香小筑</span></a>的</span><span new="" courier="" lang="EN-US" style="">BLOG</span><span style="font-family: 宋体;">里</span><span style="font-family: 宋体;">的一编</span><span style="font-family: 宋体;">主题是：</span><span new="" courier="" lang="EN-US" style="">Do not resolve DTD files when dom4j read xml file </span><span style="font-family: 宋体;">的文章里看到的。地址：</span><a href="http://blog.csdn.net/lessoft/archive/2007/06/20/1659579.aspx"><span new="" courier="" color:="" lang="EN-US" style="">http://blog.csdn.net/lessoft/archive/<st1:chsdate isrocdate="False" month="6" day="20" islunardate="False" w:st="on" year="2007">2007/06/20</st1:chsdate>/1659579.aspx</span></a><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">代码片断如下：</span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>saxReader.setEntityResolver(</span><span class="keyword">new</span><span>&nbsp;EntityResolver()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;emptyDtd&nbsp;=&nbsp;<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ByteArrayInputStream&nbsp;bytels&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ByteArrayInputStream(emptyDtd.getBytes());&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;InputSource&nbsp;resolveEntity(String&nbsp;publicId,&nbsp;String&nbsp;systemId)&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws</span><span>&nbsp;SAXException,&nbsp;IOException&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;InputSource(bytels);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
<br />
<p class="MsoNormal"><span new="" courier="" lang="EN-US" style=""><o:p>&nbsp;</o:p></span>  </p>
<p class="MsoNormal"><span style="font-family: 宋体;">完整的代码如下：</span><span new="" courier="" lang="EN-US" style=""><o:p></o:p></span></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;test;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.BufferedWriter;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.io.ByteArrayInputStream;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.File;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.io.FileWriter;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.IOException;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;junit.framework.TestCase;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.dom4j.Document;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.dom4j.DocumentHelper;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.dom4j.Element;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.dom4j.io.OutputFormat;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.dom4j.io.SAXReader;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.dom4j.io.XMLWriter;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.dom4j.tree.DefaultDocumentType;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.xml.sax.EntityResolver;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.xml.sax.InputSource;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.xml.sax.SAXException;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;com.sun.org.apache.xerces.internal.impl.Constants;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;A&nbsp;test&nbsp;case&nbsp;class&nbsp;for&nbsp;read&nbsp;and&nbsp;writer&nbsp;a&nbsp;xml&nbsp;file&nbsp;by&nbsp;Dom4j.</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;X.F.Yang&nbsp;[2007/07/03]</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@version&nbsp;1.0</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;OperateXmlByDom4jTestCase&nbsp;</span><span class="keyword">extends</span><span>&nbsp;TestCase&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Default&nbsp;way&nbsp;to&nbsp;read&nbsp;and&nbsp;writer&nbsp;a&nbsp;xml&nbsp;file&nbsp;by&nbsp;Dom4j.</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testWriteXml()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlFileOperation&nbsp;operation&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XmlFileOperation();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation.writer(<span class="keyword">new</span><span>&nbsp;SAXReaderWrapper()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;operation(SAXReader&nbsp;saxReader)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;Nothing&nbsp;to&nbsp;do.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Do&nbsp;not&nbsp;resolve&nbsp;DTD&nbsp;files&nbsp;when&nbsp;dom4j&nbsp;read&nbsp;xml&nbsp;file&nbsp;via&nbsp;the&nbsp;set&nbsp;feature.&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testWriteXmlSetFeature()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlFileOperation&nbsp;operation&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XmlFileOperation();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation.writer(<span class="keyword">new</span><span>&nbsp;SAXReaderWrapper()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;operation(SAXReader&nbsp;saxReader)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;http://apache.org/xml/features/nonvalidating/load-external-dtd&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saxReader.setFeature(&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constants.XERCES_FEATURE_PREFIX&nbsp;+&nbsp;Constants.LOAD_EXTERNAL_DTD_FEATURE,&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Do&nbsp;not&nbsp;resolve&nbsp;DTD&nbsp;files&nbsp;when&nbsp;dom4j&nbsp;read&nbsp;xml&nbsp;file&nbsp;via&nbsp;implement&nbsp;{@link&nbsp;EntityResolver}.&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testWriteXmlEntityResolver()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlFileOperation&nbsp;operation&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XmlFileOperation();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation.writer(<span class="keyword">new</span><span>&nbsp;SAXReaderWrapper()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;operation(SAXReader&nbsp;saxReader)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saxReader.setEntityResolver(<span class="keyword">new</span><span>&nbsp;EntityResolver()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;emptyDtd&nbsp;=&nbsp;&quot;<span class="string">&quot;;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteArrayInputStream&nbsp;bytels&nbsp;=&nbsp;new&nbsp;ByteArrayInputStream(emptyDtd.getBytes());</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;InputSource&nbsp;resolveEntity(String&nbsp;publicId,</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;systemId)&nbsp;throws&nbsp;SAXException,&nbsp;IOException&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;InputSource(bytels);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*/</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;interface&nbsp;SAXReaderWrapper&nbsp;{</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;operation&nbsp;{@link&nbsp;SAXReader}&nbsp;*/</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;operation(SAXReader&nbsp;saxReader)&nbsp;throws&nbsp;Exception;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;when&nbsp;the&nbsp;target&nbsp;file&nbsp;was&nbsp;existed,&nbsp;read&nbsp;and&nbsp;append&nbsp;the&nbsp;new&nbsp;element.</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;else,&nbsp;create&nbsp;a&nbsp;new&nbsp;xml&nbsp;file&nbsp;and&nbsp;add&nbsp;the&nbsp;new&nbsp;element.</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;class&nbsp;XmlFileOperation&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;target&nbsp;file&nbsp;*/</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;File&nbsp;file;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;XmlFileOperation()&nbsp;{</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;target&nbsp;file</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;=&nbsp;new&nbsp;File(&quot;</span><span>d:\\spring.xml</span><span class="string">&quot;);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Write&nbsp;xml&nbsp;file</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;wrapper&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;{@link&nbsp;SAXReaderWrapper}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;writer(SAXReaderWrapper&nbsp;wrapper)&nbsp;throws&nbsp;Exception&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;document&nbsp;=&nbsp;null;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;root&nbsp;=&nbsp;null;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;read&nbsp;the&nbsp;xml&nbsp;file&nbsp;if&nbsp;target&nbsp;file&nbsp;was&nbsp;existed&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(file.exists())&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;reader&nbsp;=&nbsp;new&nbsp;SAXReader(false);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wrapper.operation(reader);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;=&nbsp;reader.read(file);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;document.getRootElement();</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;the&nbsp;target&nbsp;file&nbsp;was&nbsp;not&nbsp;existed,&nbsp;create&nbsp;a&nbsp;new&nbsp;one</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;=&nbsp;DocumentHelper.createDocument();</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.setDocType(new&nbsp;DefaultDocumentType(&quot;</span><span>beans</span><span class="string">&quot;,&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;</span><span>-</span><span class="comment">//SPRING//DTD&nbsp;BEAN//EN&quot;,&nbsp;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;http:<span class="comment">//www.springframework.org/dtd/spring-beans.dtd&quot;));</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;document.addElement(&quot;beans<span class="string">&quot;);</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;create&nbsp;the&nbsp;element&nbsp;under&nbsp;the&nbsp;root&nbsp;element</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.addElement(&quot;</span><span>bean</span><span class="string">&quot;)</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addAttribute(&quot;</span><span>id</span><span class="string">&quot;,&nbsp;&quot;</span><span>OperateXmlByDom4jTestCase</span><span class="string">&quot;)</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addAttribute(&quot;</span><span class="keyword">class</span><span class="string">&quot;,&nbsp;&quot;</span><span>test.OperateXmlByDom4jTestCase&quot;);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;writer&nbsp;the&nbsp;document</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer(document);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">throw</span><span>&nbsp;e;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;writer(Document&nbsp;document)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLWriter&nbsp;xmlWriter&nbsp;=&nbsp;<span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;OutputFormat&nbsp;format&nbsp;=&nbsp;OutputFormat.createPrettyPrint();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWriter&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;XMLWriter(</span><span class="keyword">new</span><span>&nbsp;BufferedWriter(</span><span class="keyword">new</span><span>&nbsp;FileWriter(file)),&nbsp;format);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWriter.write(document);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">finally</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(</span><span class="keyword">null</span><span>&nbsp;!=&nbsp;xmlWriter)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWriter.flush();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWriter.close();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://fqtrnt.javaeye.com/blog/97841#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 04 Jul 2007 17:35:14 +0800</pubDate>
        <link>http://fqtrnt.javaeye.com/blog/97841</link>
        <guid>http://fqtrnt.javaeye.com/blog/97841</guid>
      </item>
  </channel>
</rss>