??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美亚洲精品一区,国产精品久久国产精品99gif,久久国产夜色精品鲁鲁99http://www.aygfsteel.com/rain1102/category/37666.html<br/><font color="green" style="font-family: 华文行楷;font-size:16px;">子曰Q危邦不入,乱邦不居。天下有道则见,无道则隐?lt;/font><font color="#3C1435"></font>zh-cnSun, 20 Sep 2009 13:43:43 GMTSun, 20 Sep 2009 13:43:43 GMT60Super CSV用于处理CSV文g的Java开源项?/title><link>http://www.aygfsteel.com/rain1102/archive/2009/09/20/295760.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 20 Sep 2009 09:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/rain1102/archive/2009/09/20/295760.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/295760.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2009/09/20/295760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/295760.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/295760.html</trackback:ping><description><![CDATA[<p>Super CSV是一个用于处理CSV文g的Java开源项目。它完全围绕面向对象的思想q行设计Q因此可以利用你的面向对象代码来使得处理CSV文g变得更加易。它支持输入/输出cd转换、数据完整性校验,支持从Q何地方以M~码d数据Q只要提供相应的Reader与Writer对象。可配置分割W,I格W号和行l束W等?<br /> 下面来看一下官Ҏ档中的代码示例?br /> 1. Ҏ头来dCSV文g<br />     把文件中的每行记录读取出来{化ؓjava对象Q假设你有一个UserBeanc,代码如下Q?br />         <span id="wmqeeuq" class="kwd"><span style="color: #008000"><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">class</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">UserBean</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> username</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> street</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> town</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="kwd">int</span><span id="wmqeeuq" class="pln"> zip</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> <br />             </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> getPassword</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> getStreet</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> street</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> getTown</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> town</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> getUsername</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> username</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">int</span><span id="wmqeeuq" class="pln"> getZip</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> zip</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">    public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setPassword</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">password </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setStreet</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> street</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">street </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> street</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">    public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setTown</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> town</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">town </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> town</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setUsername</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> username</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">username </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> username</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="kwd">        public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setZip</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">int</span><span id="wmqeeuq" class="pln"> zip</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">zip </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> zip</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">        }</span></span></span><br />  q且有一个CSV文gQ包含一个文件头Q假设文件内容如下:<br /> <span id="wmqeeuq" class="pln"><span style="color: #993366"><span id="wmqeeuq" class="pln">    username</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">   date</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">        zip</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">  town<br /> </span><span id="wmqeeuq" class="typ">    Klaus</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">    qwexyKiks</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">  </span><span id="wmqeeuq" class="lit">17</span><span id="wmqeeuq" class="pun">/</span><span id="wmqeeuq" class="lit">1</span><span id="wmqeeuq" class="pun">/</span><span id="wmqeeuq" class="lit">2007</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">   </span><span id="wmqeeuq" class="lit">1111</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">New</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">York</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="typ">    Oufu</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">     bobilop</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">    </span><span id="wmqeeuq" class="lit">10</span><span id="wmqeeuq" class="pun">/</span><span id="wmqeeuq" class="lit">10</span><span id="wmqeeuq" class="pun">/</span><span id="wmqeeuq" class="lit">2007</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln">  </span><span id="wmqeeuq" class="lit">4555</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">New</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">York</span></span></span></p> 然后你可以用一下代码来创徏UserBean的实例对象,q打印出对象的属性|<br />     <span id="wmqeeuq" class="kwd"><span style="color: #008000"><span id="wmqeeuq" class="kwd">class</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">ReadingObjects</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">        public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">static</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> main</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> args</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">throws</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Exception</span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="typ">            ICsvBeanReader</span><span id="wmqeeuq" class="pln"> inFile </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CsvBeanReader</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">FileReader</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="str">"foo.csv"</span><span id="wmqeeuq" class="pun">),</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CsvPreference</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">EXCEL_PREFERENCE</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="kwd">try</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">                final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> header </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> inFile</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">getCSVHeader</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">true</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="typ">                UserBean</span><span id="wmqeeuq" class="pln"> user</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">                while</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">user </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> inFile</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">read</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">UserBean</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="kwd">class</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> header</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> processors</span><span id="wmqeeuq" class="pun">))</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">!=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">null</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />                     </span><span id="wmqeeuq" class="typ">System</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="kwd">out</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">println</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">user</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">getZip</span><span id="wmqeeuq" class="pun">());</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">                }</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">            }</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">finally</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />                 inFile</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">close</span><span id="wmqeeuq" class="pun">();</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">            }</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">        }</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">    }<br /> </span></span></span>我们q剩下processors没有定义Q通过名字我们可以看出是解析器Q用来处理每列的数据Q当然你也可以传入nullQ表C列不做特D处理,每个解析器可以被另外一个包含在内部Q?tt>new Unique(new StrMinMax(5Q?0))Q这个代码该列的gؓ唯一的,q且长度??0Q具体处理细节我们先不讲Q来看一下我们所需要的processors是如何定义的Q?br /> <span id="wmqeeuq" class="kwd"><span style="color: #008000"><span id="wmqeeuq" class="kwd">    final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CellProcessor</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> processors </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CellProcessor</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Unique</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">StrMinMax</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="lit">5</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="lit">20</span><span id="wmqeeuq" class="pun">)),</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">StrMinMax</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="lit">8</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="lit">35</span><span id="wmqeeuq" class="pun">),</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">ParseDate</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="str">"dd/MM/yyyy"</span><span id="wmqeeuq" class="pun">),</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="kwd">    new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Optional</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">ParseInt</span><span id="wmqeeuq" class="pun">()),</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="kwd">    null</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">    };</span></span></span><span id="wmqeeuq" class="pun"><br /> 上面的代码的具体意思ؓQ?br /> W一列是一个字W串Qƈ且值是唯一的,长度??0<br /> W二列是一个字W串Q长度是8?5<br /> W三列ؓ一个日期类型,格式为天/?q_day/month/yearQ?br /> W四列是一个整型数字,但只有这列有值的时?span class="typ">ParseInt</span>处理器才会去处理q个|其实是该列可以为空Q?br /> W五列ؓ一个字W串Q默认)Q不使用处理?br /> <br /> 如果你的CSV文g没有_你也可以定义个数l来替代Q?br /> <span id="wmqeeuq" class="kwd"><span style="color: #008000"><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> header </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"username"</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"password"</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"date"</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"zip"</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"town"</span><span id="wmqeeuq" class="pun">};</span></span></span><br /> 如果你想忽略某一列,和定义处理器cMQ直接在头数l中使用null?br /> <br /> 全部代码如下Q?br /> <span id="wmqeeuq" class="kwd"><span style="color: #008000"><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> <a title="Java爱好? href="http://www.aygfsteel.com/rain1102">Java</a></span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">io</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">FileReader</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> <a title="Java爱好? href="http://www.aygfsteel.com/rain1102">Java</a></span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">io</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">IOException</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">cellprocessor</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">Optional</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">cellprocessor</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">ParseDate</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">cellprocessor</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">ParseInt</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">cellprocessor</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">constraint</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">StrMinMax</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">cellprocessor</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">constraint</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">Unique</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">cellprocessor</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">ift</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">CellProcessor</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">io</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">CsvBeanReader</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">io</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">ICsvBeanReader</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">prefs</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">CsvPreference</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> <br /> </span><span id="wmqeeuq" class="kwd">class</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">ReadingObjects</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">static</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CellProcessor</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> userProcessors </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CellProcessor</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Unique</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">StrMinMax</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="lit">5</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="lit">20</span><span id="wmqeeuq" class="pun">)),</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">StrMinMax</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="lit">8</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="lit">35</span><span id="wmqeeuq" class="pun">),</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">ParseDate</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="str">"dd/MM/yyyy"</span><span id="wmqeeuq" class="pun">),</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Optional</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">ParseInt</span><span id="wmqeeuq" class="pun">()),</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">null</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">};</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">static</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> main</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> args</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">throws</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Exception</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="typ">ICsvBeanReader</span><span id="wmqeeuq" class="pln"> inFile </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CsvBeanReader</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">FileReader</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="str">"foo.csv"</span><span id="wmqeeuq" class="pun">),</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CsvPreference</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">EXCEL_PREFERENCE</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">try</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />           </span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> header </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> inFile</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">getCSVHeader</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">true</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />           </span><span id="wmqeeuq" class="typ">UserBean</span><span id="wmqeeuq" class="pln"> user</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />           </span><span id="wmqeeuq" class="kwd">while</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">user </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> inFile</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">read</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">UserBean</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="kwd">class</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> header</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> userProcessors</span><span id="wmqeeuq" class="pun">))</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">!=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">null</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />             </span><span id="wmqeeuq" class="typ">System</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="kwd">out</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">println</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">user</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">getZip</span><span id="wmqeeuq" class="pun">());</span><span id="wmqeeuq" class="pln"><br />           </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">finally</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />           inFile</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">close</span><span id="wmqeeuq" class="pun">();</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />    </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br /> <br /> <br /> </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">class</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">UserBean</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> username</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> town</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="typ">Date</span><span id="wmqeeuq" class="pln"> date</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="kwd">int</span><span id="wmqeeuq" class="pln"> zip</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Date</span><span id="wmqeeuq" class="pln"> getDate</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> date</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> getPassword</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> getTown</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> town</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> getUsername</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> username</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">int</span><span id="wmqeeuq" class="pln"> getZip</span><span id="wmqeeuq" class="pun">()</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">return</span><span id="wmqeeuq" class="pln"> zip</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setDate</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Date</span><span id="wmqeeuq" class="pln"> date</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">date </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> date</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setPassword</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">password </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> password</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setTown</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> town</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">town </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> town</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setUsername</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pln"> username</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">username </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> username</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br />     </span><span id="wmqeeuq" class="kwd">public</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">void</span><span id="wmqeeuq" class="pln"> setZip</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">int</span><span id="wmqeeuq" class="pln"> zip</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />         </span><span id="wmqeeuq" class="kwd">this</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">zip </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> zip</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> <br /> </span><span id="wmqeeuq" class="pun">}</span></span></span><span id="wmqeeuq" class="pun"><br /> <br /> </span>如果你在d文g之前Ҏ不知道文件的具体格式Q你可以选择<tt>CsvListReader.read()</tt>ҎQ把每行d出来的数据放在一个List里面?br /> <br /> d文g的代码我们看CQ下面来看一下写的操作,也很单?br /> <span id="wmqeeuq" class="kwd"><span style="color: #008000"><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> <a title="Java爱好? href="http://www.aygfsteel.com/rain1102">Java</a></span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">util</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">HashMap</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">io</span><span id="wmqeeuq" class="pun">.*;</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="kwd">import</span><span id="wmqeeuq" class="pln"> org</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">supercsv</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">prefs</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="typ">CsvPreference</span><span id="wmqeeuq" class="pun">;</span><span id="wmqeeuq" class="pln"><br /> <br /> </span><span id="wmqeeuq" class="kwd">class</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">WritingMaps</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />   main</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> args</span><span id="wmqeeuq" class="pun">)</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">throws</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Exception</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="typ">ICsvMapWriter</span><span id="wmqeeuq" class="pln"> writer </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CsvMapWriter</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">FileWriter</span><span id="wmqeeuq" class="pun">(...),</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">CsvPreference</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">EXCEL_PREFERENCE</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="kwd">try</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />       </span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> header </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">[]</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"name"</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"city"</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"zip"</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">};</span><span id="wmqeeuq" class="pln"><br />       </span><span id="wmqeeuq" class="com">// set up some data to write</span><span id="wmqeeuq" class="pln"><br />       </span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">HashMap</span><span id="wmqeeuq" class="pun"><</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">?</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">super</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Object</span><span id="wmqeeuq" class="pun">></span><span id="wmqeeuq" class="pln"> data1 </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">HashMap</span><span id="wmqeeuq" class="pun"><</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Object</span><span id="wmqeeuq" class="pun">>();</span><span id="wmqeeuq" class="pln"><br />       data1</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">put</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">header</span><span id="wmqeeuq" class="pun">[</span><span id="wmqeeuq" class="lit">0</span><span id="wmqeeuq" class="pun">],</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"Karl"</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />       data1</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">put</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">header</span><span id="wmqeeuq" class="pun">[</span><span id="wmqeeuq" class="lit">1</span><span id="wmqeeuq" class="pun">],</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"Tent city"</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />       data1</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">put</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">header</span><span id="wmqeeuq" class="pun">[</span><span id="wmqeeuq" class="lit">2</span><span id="wmqeeuq" class="pun">],</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="lit">5565</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />       </span><span id="wmqeeuq" class="kwd">final</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">HashMap</span><span id="wmqeeuq" class="pun"><</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">?</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">super</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Object</span><span id="wmqeeuq" class="pun">></span><span id="wmqeeuq" class="pln"> data2 </span><span id="wmqeeuq" class="pun">=</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">new</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">HashMap</span><span id="wmqeeuq" class="pun"><</span><span id="wmqeeuq" class="typ">String</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="typ">Object</span><span id="wmqeeuq" class="pun">>();</span><span id="wmqeeuq" class="pln"><br />       data2</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">put</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">header</span><span id="wmqeeuq" class="pun">[</span><span id="wmqeeuq" class="lit">0</span><span id="wmqeeuq" class="pun">],</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"Banjo"</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />       data2</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">put</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">header</span><span id="wmqeeuq" class="pun">[</span><span id="wmqeeuq" class="lit">1</span><span id="wmqeeuq" class="pun">],</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="str">"River side"</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />       data2</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">put</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">header</span><span id="wmqeeuq" class="pun">[</span><span id="wmqeeuq" class="lit">2</span><span id="wmqeeuq" class="pun">],</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="lit">5551</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />       </span><span id="wmqeeuq" class="com">// the actual writing</span><span id="wmqeeuq" class="pln"><br />       writer</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">writeHeader</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">header</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />       writer</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">write</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">data1</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> header</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />       writer</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">write</span><span id="wmqeeuq" class="pun">(</span><span id="wmqeeuq" class="pln">data2</span><span id="wmqeeuq" class="pun">,</span><span id="wmqeeuq" class="pln"> header</span><span id="wmqeeuq" class="pun">);</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="kwd">finally</span><span id="wmqeeuq" class="pln"> </span><span id="wmqeeuq" class="pun">{</span><span id="wmqeeuq" class="pln"><br />       writer</span><span id="wmqeeuq" class="pun">.</span><span id="wmqeeuq" class="pln">close</span><span id="wmqeeuq" class="pun">();</span><span id="wmqeeuq" class="pln"><br />     </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br />   </span><span id="wmqeeuq" class="pun">}</span><span id="wmqeeuq" class="pln"><br /> </span><span id="wmqeeuq" class="pun">}</span></span></span><br /> </span></tt><img src ="http://www.aygfsteel.com/rain1102/aggbug/295760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2009-09-20 17:48 <a href="http://www.aygfsteel.com/rain1102/archive/2009/09/20/295760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用dom4j解析XML时候忽略DTD文ghttp://www.aygfsteel.com/rain1102/archive/2009/08/06/290063.htmlEric.ZhouEric.ZhouThu, 06 Aug 2009 03:17:00 GMThttp://www.aygfsteel.com/rain1102/archive/2009/08/06/290063.htmlhttp://www.aygfsteel.com/rain1102/comments/290063.htmlhttp://www.aygfsteel.com/rain1102/archive/2009/08/06/290063.html#Feedback1http://www.aygfsteel.com/rain1102/comments/commentRss/290063.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/290063.html要这么做是因为Serverq回l我们的XML肯定是合法的Q不需要验证?/p>

而设|不需要验证,只需要设|DocumentBuilderFactory.setValidatingQfalseQ就可以辑ֈ效果了,但是解析器还是会dDTD的,解决的方法是实现EntityResolver接口Q具体代码如下:

package com.founder.demo;

import Java.io.ByteArrayInputStream;
import Java.io.IOException;

import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class IgnoreDTDEntityResolver implements EntityResolver {

 @Override
 public InputSource resolveEntity(String publicId, String systemId)
   throws SAXException, IOException {
        return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
 }

}

然后讄SAXReader 对象如下Q?br /> SAXReader reader = new SAXReader();
reader.setEntityResolver(new IgnoreDTDEntityResolver()); // ignore dtd

一切ok?/p>

Eric.Zhou 2009-08-06 11:17 发表评论
]]>
数据转换引擎QSmooks [转蝲]http://www.aygfsteel.com/rain1102/archive/2009/08/04/289847.htmlEric.ZhouEric.ZhouTue, 04 Aug 2009 12:00:00 GMThttp://www.aygfsteel.com/rain1102/archive/2009/08/04/289847.htmlhttp://www.aygfsteel.com/rain1102/comments/289847.htmlhttp://www.aygfsteel.com/rain1102/archive/2009/08/04/289847.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/289847.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/289847.html阅读全文

Eric.Zhou 2009-08-04 20:00 发表评论
]]>
四种操作xml的方式: SAX, DOM, JDOM , DOM4J的比较[转蝲]http://www.aygfsteel.com/rain1102/archive/2009/06/20/283349.htmlEric.ZhouEric.ZhouSat, 20 Jun 2009 06:09:00 GMThttp://www.aygfsteel.com/rain1102/archive/2009/06/20/283349.htmlhttp://www.aygfsteel.com/rain1102/comments/283349.htmlhttp://www.aygfsteel.com/rain1102/archive/2009/06/20/283349.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/283349.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/283349.html

1. 介绍

1QDOM(JAXP Crimson解析?
        DOM是用与^台和语言无关的方式表CXML文档的官方W3C标准。DOM是以层次l构l织的节Ҏ信息片断的集合。这个层ơ结构允许开发h员在树中L特定信息。分析该l构通常需要加载整个文档和构造层ơ结构,然后才能做Q何工作。由于它是基于信息层ơ的Q因而DOM被认为是Z树或Z对象的。DOM以及q义的基于树的处理具有几个优炏V首先,׃树在内存中是持久的,因此可以修改它以便应用程序能Ҏ据和l构作出更改。它q可以在M时候在树中上下DQ而不是像SAX那样是一ơ性的处理。DOM使用h也要单得多?/p>

2QSAX

        SAX处理的优炚w常类g媒体的优点。分析能够立卛_始,而不是等待所有的数据被处理。而且Q由于应用程序只是在d数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优炏V事实上Q应用程序甚至不必解析整个文档;它可以在某个条g得到满时停止解析。一般来_SAXq比它的替代者DOM快许多?
   选择DOMq是选择SAXQ?对于需要自q写代码来处理XML文档的开发h员来_  选择DOMq是SAX解析模型是一个非帔R要的设计决策?DOM采用建立树Şl构的方式访问XML文档Q而SAX采用的事件模型?

  DOM解析器把XML文档转化Z个包含其内容的树Qƈ可以Ҏq行遍历。用DOM解析模型的优Ҏ~程ҎQ开发h员只需要调用徏树的指oQ然后利用navigation APIs讉K所需的树节点来完成Q务。可以很Ҏ的添加和修改树中的元素。然而由于用DOM解析器的时候需要处理整个XML文档Q所以对性能和内存的要求比较高,其是遇到很大的XML文g的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频J的改变的服务中?

  SAX解析器采用了Z事g的模型,它在解析XML文档的时候可以触发一pd的事Ӟ当发现给定的tag的时候,它可以激zM个回调方法,告诉该方法制定的标签已经扑ֈ。SAX对内存的要求通常会比较低Q因为它让开发h员自己来军_所要处理的tag。特别是当开发h员只需要处理文档中所包含的部分数据时QSAXq种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难Q而且很难同时讉K同一个文档中的多处不同数据?

3QJDOM           http://www.jdom.org/

          JDOM的目的是成ؓJava特定文档模型Q它化与XML的交互ƈ且比使用DOM实现更快。由于是W一个Java特定模型QJDOM一直得到大力推q和促进。正在考虑通过“Java规范hJSR-102”它最l用?#8220;Java标准扩展”。从2000q初已l开始了JDOM开发?

  JDOM与DOM主要有两斚w不同。首先,JDOM仅用具体类而不使用接口。这在某些方面简化了APIQ但是也限制了灵zL。第二,API大量使用了Collectionsc,化了那些已经熟悉q些cȝJava开发者的使用?

  JDOM文档声明其目的是“使用20%(或更?的精力解?0%(或更?Java/XML问题”(Ҏ学习曲线假定?0%)。JDOM对于大多数Java/XML应用E序来说当然是有用的Qƈ且大多数开发者发现API比DOMҎ理解得多。JDOMq包括对E序行ؓ的相当广泛检查以防止用户做Q何在XML中无意义的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错?。这也许是比学习DOM或JDOM接口都更有意义的工作?

  JDOM自n不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(管它还可以以前构造的DOM表示作ؓ输入)。它包含一些{换器以将JDOM表示输出成SAX2事g、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码?/p>

4QDOM4J http://dom4j.sourceforge.net/ 
            
        虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一U智能分支。它合ƈ了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或化文档的基于事件的处理。它q提供了构徏文档表示的选项Q它通过DOM4J API和标准DOM接口hq行讉K功能。从2000下半q开始,它就一直处于开发之中?

  为支持所有这些功能,DOM4J使用接口和抽象基本类Ҏ。DOM4J大量使用了API中的Collectionsc,但是在许多情况下Q它q提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是Q虽然DOM4J付出了更复杂的API的代P但是它提供了比JDOM大得多的灉|性?

  在添加灵zL、XPath集成和对大文档处理的目标ӞDOM4J的目标与JDOM是一LQ针对Java开发者的易用性和直观操作。它q致力于成ؓ比JDOM更完整的解决ҎQ实现在本质上处理所有Java/XML问题的目标。在完成该目标时Q它比JDOM更少防止不正的应用E序行ؓ?

  DOM4J是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的Y件。如今你可以看到来多的Java软g都在使用DOM4J来读写XMLQ特别值得一提的是连Sun的JAXM也在用DOM4J?

2.. 比较

1QDOM4J性能最好,qSun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4JQ例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文g。如果不考虑可移植性,那就采用DOM4J.

2QJDOM和DOM在性能试时表C佻I在测?0M文档时内存溢出。在文档情况下q值得考虑使用DOM和JDOM。虽然JDOM的开发者已l说明他们期望在正式发行版前专注性能问题Q但是从性能观点来看Q它实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现q泛应用于多U编E语a。它q是许多其它与XML相关的标准的基础Q因为它正式获得W3C推荐(与基于非标准的Java模型相对)Q所以在某些cd的项目中可能也需要它(如在JavaScript中用DOM)?/p>

3QSAX表现较好Q这要依赖于它特定的解析方式Q事仉动。一个SAX即到来的XML,但ƈ没有载入到内?当然当XML被dӞ会有部分文档暂时隐藏在内存中)?/p>

3. 四种xml操作方式的基本用方?/p>

xml文gQ?/p>

<?xml version="1.0" encoding="utf-8" ?>
<Result>
   <VALUE>
       <NO DATE="2005">A1</NO>
       <ADDR>GZ</ADDR>
   </VALUE>
   <VALUE>
       <NO DATE="2004">A2</NO>
       <ADDR>XG</ADDR>
  </VALUE>
</Result>

1QDOM

import Java.io.*;
import Java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;

public class MyXMLReader{
 public static void main(String arge[]){

  long lasting =System.currentTimeMillis();
  try{ 
   File f=new File("data_10k.xml");
   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
   DocumentBuilder builder=factory.newDocumentBuilder();
   Document doc = builder.parse(f);
   NodeList nl = doc.getElementsByTagName("VALUE");
   for (int i=0;iQnl.getLength();i++){
    System.out.print("车牌L:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
    System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
   }
  }catch(Exception e){
   e.printStackTrace();
}

2QSAX

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class MyXMLReader extends DefaultHandler {

 Java.util.Stack tags = new Java.util.Stack();
 public MyXMLReader() {
  super();
   }

 public static void main(String args[]) {
  long lasting = System.currentTimeMillis();
  try {
   SAXParserFactory sf = SAXParserFactory.newInstance();
   SAXParser sp = sf.newSAXParser();
   MyXMLReader reader = new MyXMLReader();
   sp.parse(new InputSource("data_10k.xml"), reader);
  } catch (Exception e) {
   e.printStackTrace();
  }

  System.out.println("q行旉Q? + (System.currentTimeMillis() - lasting) + "毫秒");}
  public void characters(char ch[], int start, int length) throws SAXException {
  String tag = (String) tags.peek();
  if (tag.equals("NO")) { 
   System.out.print("车牌LQ? + new String(ch, start, length));
    }
    if (tag.equals("ADDR")) {
  System.out.println("地址:" + new String(ch, start, length));
    }
   }

  public void startElement(String uri,String localName,String qName,Attributes attrs) {
  tags.push(qName);}

3Q?JDOM

import Java.io.*;
import Java.util.*;
import org.jdom.*;
import org.jdom.input.*;

public class MyXMLReader {

 public static void main(String arge[]) {
  long lasting = System.currentTimeMillis();
  try {
   SAXBuilder builder = new SAXBuilder(); 
   Document doc = builder.build(new File("data_10k.xml")); 
   Element foo = doc.getRootElement(); 
   List allChildren = foo.getChildren(); 
   for(int i=0;iQallChildren.size();i++) { 
    System.out.print("车牌L:" + ((Element)allChildren.get(i)).getChild("NO").getText());
    System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
   }
  } catch (Exception e) {
   e.printStackTrace();
}

}

4QDOM4J

import Java.io.*;
import Java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;

public class MyXMLReader {

 public static void main(String arge[]) {
  long lasting = System.currentTimeMillis();
  try {
   File f = new File("data_10k.xml");
   SAXReader reader = new SAXReader();
   Document doc = reader.read(f);
   Element root = doc.getRootElement();
   Element foo;
   for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
    foo = (Element) i.next();
    System.out.print("车牌L:" + foo.elementText("NO"));
    System.out.println("车主地址:" + foo.elementText("ADDR"));
   }
  } catch (Exception e) {
   e.printStackTrace();
    }
}



Eric.Zhou 2009-06-20 14:09 发表评论
]]>
XML和JSON响应http://www.aygfsteel.com/rain1102/archive/2008/06/05/206078.htmlEric.ZhouEric.ZhouThu, 05 Jun 2008 08:21:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/06/05/206078.htmlhttp://www.aygfsteel.com/rain1102/comments/206078.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/06/05/206078.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/206078.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/206078.html使用renderҎ输出XML

Grails支持一些不同的Ҏ来生XML和JSON响应。第一个是隐式的通过renderҎ?

renderҎ可以传递一个代码块来执行标记生成器产生XML

def list = {
def results = Book.list()
render(contentType:"text/xml") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}

q段代码的结果将会像q样Q?

<books>
<book title="The Stand" />
<book title="The Shining" />
</books>

注意Q当你用标记生成器Ӟ必须心避免命名冲突。例如,q段代码生一个错误:

def list = {
def books = Book.list()  // naming conflict here
render(contentType:"text/xml") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}

原因是,q里的一个本地变?code>books企图作ؓҎ被调用?

使用renderҎ输出JSON

render Ҏ可以同样被用于输出JSON:

def list = {
def results = Book.list()
render(contentType:"text/json") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}

在这U情况下Q结果就会是大致相同的:

[
{title:"The Stand"},
{title:"The Shining"}
]

同样的命名冲H危险适用于JSON生成器?

自动XML列集(Marshalling)

Q译者注Q在此附上对于列?Marshalling)解释Q对函数参数q行打包处理得过E,因ؓ指针{数据,必须通过一定得转换Q才能被另一lg所理解。可以说列集(Marshalling)是一U数据格式的转换Ҏ。)

Grails同样支持自动列集(Marshalling)领域cMؓXML通过特定的{换器?

首先Q导?code>grails.converters cdC的控制器QControllersQ中Q?

import grails.converters.*

现在Q你可以使用下列高度易读的语法来自动转换领域cLXMLQ?

render Book.list() as XML

输出l果看上M像下列这P

<?xml version="1.0" encoding="ISO-8859-1"?>
<list>
<book id="1">
<author>Stephen King</author>
<title>The Stand</title>
</book>
<book id="2">
<author>Stephen King</author>
<title>The Shining</title>
</book>
</list>

一个用{换器的替代方法是使用Grails的codecsҎ。codecsҎ提供了encodeAsXML和encodeAsJSONҎ:

def xml = Book.list().encodeAsXML()
render xml

 

自动JSON列集(Marshalling)

Grails同样支持自动列集(Marshalling)为JSON通过同样的机制。简单替?code>XML ?code>JSON

render Book.list() as JSON

输出l果看上M像下列这P

[
{"id":1,
"class":"Book",
"author":"Stephen King",
"title":"The Stand"},
{"id":2,
"class":"Book",
"author":"Stephen King",
"releaseDate":new Date(1194127343161),
"title":"The Shining"}
]

再次作ؓ一U替代,你可以?code>encodeAsJSON辑ֈ相同的效?



Eric.Zhou 2008-06-05 16:21 发表评论
]]>
XMLSchema中的key和uniquehttp://www.aygfsteel.com/rain1102/archive/2008/03/29/189479.htmlEric.ZhouEric.ZhouSat, 29 Mar 2008 08:16:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/03/29/189479.htmlhttp://www.aygfsteel.com/rain1102/comments/189479.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/03/29/189479.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/189479.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/189479.html

关于XML Schema中的key和unique的概念很多Schema教程里面讲过Q可惜网上大部分教程里面的例子是错误的,而且q没有给出完整清晰的解释Q我查找了Schema的规范ƈ写出了相应了例子Q理清了q两个概念,希望对大家有所帮助。XML Schema规范来自?br /> http://www.w3.org/TR/xmlschema-0/

1.unique的定义和例子
规范中对于unique是这样定义的QXML Schema enables us to indicate that any attribute or element value must be unique within a certain scope. To indicate that one particular attribute or element value is unique, we use the unique element first to "select" a set of elements, and then to identify the attribute or element "field" relative to each selected element that has to be unique within the scope of the set of selected elements.
译文QXML Schema允许我们指出L的属性或者元素值在某个范围内是唯一的。ؓ了指个属性或者元素值的唯一性,我们使用了unique元素Q它首先“选择”一l元素,然后指出q个属性或者元素的“?#8221;在上一步所选择出的元素集合中是唯一的?br /> 例子SchemaQUniqueTest.xsd
<?xml version="1.0" encoding="GB2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="Person">
  <xs:annotation>
   <xs:documentation>Comment describing your root element</xs:documentation>
  </xs:annotation>
  <xs:complexType>
   <xs:sequence>
    <xs:element name="Name" type="xs:string" maxOccurs="unbounded"/>
    <xs:element name="Id" type="xs:integer" maxOccurs="unbounded">
    </xs:element>
   </xs:sequence>
  </xs:complexType>
  <xs:unique name="IdUnique">
   <xs:selector xpath=".//Id"/>
   <xs:field xpath="."/>
  </xs:unique>
 </xs:element>
</xs:schema>

例子XML:UniqueTest.xml
<?xml version="1.0" encoding="GB2312"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="UniqueTest.xsd">
<Name>wxb_nudt</Name>
 <Id>1001</Id>
 <Id>1002</Id>
 <Id>1001</Id> <!--q儿׃报错Q因为它的值和W一个Id重复了,q不是唯一?->
 <Id>1004</Id>
</Person>

2.key的定义和例子
规范中是通过一个较长的例子来说明key和keyref的定义,归纳h可以做如下定义:XML Schema可以通过一个元素或者属性定义ؓ一个keyQ这个key必须是unique的,q个key可以在XML文档中的其他部分通过keyrefq行引用Qkeyref的g定取自于key的某一个倹{key的概念很cM于数据库中的外键?br /> key的具体定义方法很cM于unique的定义方法,首先“选择”一l元素,然后指出某个属性或者元素的“?#8221;是一个key?br /> 而keyref与key的定义完全相|唯一的区别是加了一个refer属性,q个refer属性指Zkey的名字,具体例子如下Q?br /> 例子schemaQKeyExam.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by wxb (nudt) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xsd:element name="rootElement">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="elementOne" maxOccurs="unbounded">
     <xsd:complexType>
      <xsd:attribute name="elementOneKey" type="xsd:integer"/>
      <xsd:attribute name="elementOneDesc" type="xsd:string"/>
     </xsd:complexType>
    </xsd:element>
    <xsd:element name="elementTwo" maxOccurs="unbounded">
     <xsd:complexType>
      <xsd:attribute name="elementTwoKey" type="xsd:integer"/>
      <xsd:attribute name="elementOneKey" type="xsd:string"/>
      <xsd:attribute name="elementTwoDesc" type="xsd:string"/>
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
  <xsd:key name="elementOnePK">
   <xsd:selector xpath=".//elementOne"/>
   <xsd:field xpath="@elementOneDesc"/>
  </xsd:key>
  <xsd:keyref name="elementOneFK" refer="elementOnePK">
   <xsd:selector xpath=".//elementTwo"/>
   <xsd:field xpath="@elementTwoDesc"/>
  </xsd:keyref>
  <xsd:unique name="EOneKeyU" xsi:type="xsd:integer">
   <xsd:selector xpath=".//elementOne"/>
   <xsd:field xpath="@elementOneKey"/>
  </xsd:unique>
 </xsd:element>
</xsd:schema>

例子xmlQKeyExam.xml
<?xml version="1.0" encoding="UTF-8"?>
<rootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="KeyExam.xsd">
 <elementOne elementOneKey="1" elementOneDesc="a"/>
 <elementOne elementOneKey="2" elementOneDesc="b"/>
 <elementOne elementOneKey="3" elementOneDesc="c"/>
 <elementOne elementOneKey="4" elementOneDesc="d"/>
 <elementTwo elementOneKey="5" elementTwoDesc="e" elementTwoKey="78"/>
 <!--上面的elementTwoDesc作ؓelementOneDesc的一个keyrefQ它必须取g上面?个keyg一Q这里它的?e"因ؓ不是取g"a","b","c","d",所以会报错-->
</rootElement>



Eric.Zhou 2008-03-29 16:16 发表评论
]]>
Schema中的一些元素值和属性值约?/title><link>http://www.aygfsteel.com/rain1102/archive/2008/03/29/189435.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sat, 29 Mar 2008 04:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/rain1102/archive/2008/03/29/189435.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/189435.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2008/03/29/189435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/189435.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/189435.html</trackback:ping><description><![CDATA[<p>  </p> <p style="text-align: left" align="left"><span style="font-size: 12pt; color: red; font-family: 宋体">对一l值的U束Q用枚举)</span><span style="font-size: 12pt; font-family: 宋体"><br /> </span><span style="font-size: 10pt; font-family: 宋体">下述案例l名?car"的元素定义了U束条gQ符合条件的值有QAudi、Golf、BMWQ?br /> </span><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:element name="car"> </span></p> <p style="text-align: left" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:simpleType><br />  <xs:restriction base="xs:string"><br />     <xs:enumeration value="Audi"/><br />     <xs:enumeration value="Golf"/><br />     <xs:enumeration value="BMW"/><br />  </xs:restriction><br /> </xs:simpleType> </span></p> <p style="text-align: left" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:element>   </span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: red; font-family: 宋体">对一pd值的U束 </span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 10pt; color: black; font-family: 宋体">下述案例l名?letter"的元素定义了U束条g。唯一W合条g的值是?a ?z 之间的一个小写字母:</span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:element name="letter"></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:simpleType></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:restriction base="xs:string"></span></p> <p style="text-indent: 24pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:pattern value="[a-z]"/></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:restriction></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:simpleType></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:element></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: black; font-family: 宋体">下述案例l名?gender"的元素定义了一个约束条件。唯一W合的值是male Q男性)或femaleQ女性)Q?/span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:element name="gender"></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:simpleType></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:restriction base="xs:string"></span></p> <p style="text-indent: 24pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:pattern value="male|female"/></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:restriction></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:simpleType></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:element></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: red; font-family: 宋体">对空白符的约?/span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: black; font-family: 宋体">下述案例l名?address"的元素定义了一个约束条件。空白符讄?preserve"Q保留)Q这意味着XML处理器不会删除Q何空白符Q?/span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:element name="address"></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:simpleType></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:restriction base="xs:string"></span></p> <p style="text-indent: 24pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:whiteSpace value="</span><span style="font-size: 12pt; color: #333399; font-family: 宋体">preserve</span><span style="font-size: 12pt; color: green; font-family: 宋体">"/></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:restriction></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:simpleType></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:element></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 10pt; color: black; font-family: 宋体">下述案例l名?address"的元素定义了一个约束条件。空白符讄? replace "Q替代)Q这意味着XML处理器会用空格替代所有的I白字符Q其中包括:换行W、制表符、空格符、回车符Q:</span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:element name="address"></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:simpleType></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:restriction base="xs:string"></span></p> <p style="text-indent: 24pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:whiteSpace value="</span><span style="font-size: 12pt; color: #333399; font-family: 宋体">replace</span><span style="font-size: 12pt; color: green; font-family: 宋体">"/></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:restriction></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:simpleType></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:element></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 10pt; color: black; font-family: 宋体">下述案例l名?address"的元素定义了一个约束条件。空白符讄?collapse"Q清除)Q这意味着XML处理器会清除所有的I白字符Q换行符、制表符、空格符以及回RW都被空格符替代。头部、尾部的I格会被清除Q多个空g会自动减ؓ一个)Q?/span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:element name="address"></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:simpleType></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:restriction base="xs:string"></span></p> <p style="text-indent: 24pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"><xs:whiteSpace value="</span><span style="font-size: 12pt; color: #333399; font-family: 宋体">collapse</span><span style="font-size: 12pt; color: green; font-family: 宋体">"/></span></p> <p style="text-indent: 12pt; text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:restriction></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:simpleType></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-size: 12pt; color: green; font-family: 宋体"></xs:element></span></p> <p style="text-align: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left"><span style="font-family: 宋体">Ҏ据类型的U束</span></p> <p> <table style="width: 563px; height: 812px" cellspacing="0" cellpadding="0" width="563" border="1"> <tbody> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; width: 15%; padding-top: 0.75pt" valign="top" width="15%"> <p style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体">Constraint<br /> </span></strong><strong><span style="font-size: 12pt; font-family: 宋体">U束</span></strong></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; width: 85%; padding-top: 0.75pt" valign="top" width="85%"> <p style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体">Description<br /> </span></strong><strong><span style="font-size: 12pt; font-family: 宋体">说明</span></strong></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">enumeration</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Defines a list of acceptable values<br /> </span><span style="font-size: 12pt; font-family: 宋体">定义了一pd的有效?/span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">fractionDigits</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了允许出现的数位数的最大位数。值必d于等?</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">length</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了允许出现的字符或列表项的个数。值必d于等?</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">maxExclusive</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the upper bounds for numeric values (the value must be less than this value)<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了数g限(数值必d于该|</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">maxInclusive</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the upper bounds for numeric values (the value must be less than or equal to this value)<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了数g限(数值必d于等于该|</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">maxLength</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了允许出现的字符或列表项的最大个数。值必d于等?</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">minExclusive</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the lower bounds for numeric values (the value must be greater than this value)<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了数值的下限 Q数值必d于该|</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">minInclusive</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the lower bounds for numeric values (the value must be greater than or equal to this value)<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了数值的下限Q数值必d于等于该|</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">minLength</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了允许出现的字符或列表的最个数。值必d于等?</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">pattern</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Defines the exact sequence of characters that are acceptable <br /> </span><span style="font-size: 12pt; font-family: 宋体">定义了符合要求的字符的精排列顺?/span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">totalDigits</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies the exact number of digits allowed. Must be greater than zero<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了允许出现的字符的精个数。值必d?</span></p> </td> </tr> <tr> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">whiteSpace</span></p> </td> <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt" valign="top"> <p style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled<br /> </span><span style="font-size: 12pt; font-family: 宋体">指定了空白符的处理方式(其中包括Q换行符、制表符、空格符和回车符Q?/span></p> </td> </tr> </tbody> </table> </p><img src ="http://www.aygfsteel.com/rain1102/aggbug/189435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-29 12:44 <a href="http://www.aygfsteel.com/rain1102/archive/2008/03/29/189435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ҎSchema使用javax.xml.validation.Validator验证XMLhttp://www.aygfsteel.com/rain1102/archive/2008/03/27/189137.htmlEric.ZhouEric.ZhouThu, 27 Mar 2008 13:46:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/03/27/189137.htmlhttp://www.aygfsteel.com/rain1102/comments/189137.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/03/27/189137.html#Feedback1http://www.aygfsteel.com/rain1102/comments/commentRss/189137.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/189137.htmlSchemaValidation .java

package com.founder.xml;

import Java.io.IOException;
import Java.io.InputStream;

import javax.xml.XMLConstants;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class SchemaValidation {

 /**
  * @param args
  * @throws IOException
  * @throws SAXException
  * @throws ParserConfigurationException
  */
 public static void main(String[] args) throws ParserConfigurationException,
   SAXException, IOException {
  SchemaValidation sv = new SchemaValidation();
  sv.validate();
 }

 public void validate() {
  try {
   String strLang = XMLConstants.W3C_XML_SCHEMA_NS_URI;
   SchemaFactory factory = SchemaFactory.newInstance(strLang);

   InputStream isSchema = getClass().getResourceAsStream("/founder.xsd");
   StreamSource ss = new StreamSource(isSchema);
   Schema schema = factory.newSchema(ss);

   Validator validator = schema.newValidator();
   
   InputStream isXML = getClass().getResourceAsStream("/founder.xml");
   
   StreamSource source = new StreamSource(isXML);
   validator.validate(source);
   System.out.println("Result : Valid!");

  } catch (Exception e) {
   e.printStackTrace();
   System.out.println("Result : Invalid!");
  }

 }

}


founder.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns="http://www.founder.com" elementFormDefault="qualified">
 <xs:element name="note">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="to" type="xs:string" />
    <xs:element name="from" type="xs:string" />
    <xs:element name="heading" type="xs:string" />
    <xs:element name="body" type="xs:string" />
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>


founder.xml

<?xml version="1.0"?>
<note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.founder.com founder.xsd">
 <to>Tove</to>
 <from>Jani</from>
 <heading>Reminder</heading>
 <body>Don't forget me this weekend!</body>
</note>





Eric.Zhou 2008-03-27 21:46 发表评论
]]>
RSShttp://www.aygfsteel.com/rain1102/archive/2008/01/18/176345.htmlEric.ZhouEric.ZhouFri, 18 Jan 2008 14:14:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/01/18/176345.htmlhttp://www.aygfsteel.com/rain1102/comments/176345.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/01/18/176345.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/176345.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/176345.html阅读全文

Eric.Zhou 2008-01-18 22:14 发表评论
]]>
XML/XSL-FOhttp://www.aygfsteel.com/rain1102/archive/2008/01/18/176203.htmlEric.ZhouEric.ZhouFri, 18 Jan 2008 06:36:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/01/18/176203.htmlhttp://www.aygfsteel.com/rain1102/comments/176203.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/01/18/176203.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/176203.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/176203.html阅读全文

Eric.Zhou 2008-01-18 14:36 发表评论
]]>
Schema (XSD) 教程http://www.aygfsteel.com/rain1102/archive/2008/01/17/175861.htmlEric.ZhouEric.ZhouThu, 17 Jan 2008 02:53:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/01/17/175861.htmlhttp://www.aygfsteel.com/rain1102/comments/175861.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/01/17/175861.html#Feedback2http://www.aygfsteel.com/rain1102/comments/commentRss/175861.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/175861.htmlSchema (XSD) 教程


Eric.Zhou 2008-01-17 10:53 发表评论
]]>
XMLDOM对象Ҏ手册http://www.aygfsteel.com/rain1102/archive/2006/10/17/75578.htmlEric.ZhouEric.ZhouTue, 17 Oct 2006 04:48:00 GMThttp://www.aygfsteel.com/rain1102/archive/2006/10/17/75578.htmlhttp://www.aygfsteel.com/rain1102/comments/75578.htmlhttp://www.aygfsteel.com/rain1102/archive/2006/10/17/75578.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/75578.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/75578.html阅读全文

Eric.Zhou 2006-10-17 12:48 发表评论
]]>
Java 语言?XPath APIhttp://www.aygfsteel.com/rain1102/archive/2006/09/18/70267.htmlEric.ZhouEric.ZhouMon, 18 Sep 2006 05:34:00 GMThttp://www.aygfsteel.com/rain1102/archive/2006/09/18/70267.htmlhttp://www.aygfsteel.com/rain1102/comments/70267.htmlhttp://www.aygfsteel.com/rain1102/archive/2006/09/18/70267.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/70267.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/70267.htmlXPath 表达式比J琐的文档对象模型(DOMQ导航代码要Ҏ~写得多。如果需要从 XML 文档中提取信息,最快捷、最单的办法是?Java™ E序中嵌?XPath 表达式。Java 5 推出?javax.xml.xpath 包,q是一个用?XPath 文档查询的独立于 XML 对象模型的库?/blockquote>

如果要告诉别Z一加仑牛奶Q您会怎么_“请去C加仑牛奶回来” q是 “从前门出去,向左转,C个街区向双{Q再走半个街区向双{q入商店。走向四号通道Q沿通道Cc_左,拿一瓶一加仑装的牛奶然后到收银台付款。再沿原路回家?#8221; 直太可笑了。只要在 “请去C加仑牛奶回来” 的基上稍加指C,多数成h都能自己买回牛奶来?

查询语言和计机搜烦与此cM。直接说 “找一?Cryptonomicon 的副?#8221; 要比~写搜烦某个数据库的详细逻辑Ҏ得多。由于搜索操作的逻辑非常怼Q可以发明一U通用语言让您使用 “扑ֈ Neal Stephenson 的所有著?#8221; q样的命令,然后~写对特定数据存储执行此cL询的引擎?

XPath

在众多查询语a之中Q结构化查询语言QSQLQ是一U针Ҏ询特定类型的关系库而设计和优化的语a。其他不那么常见的查询语aq有对象查询语言QOQLQ和 XQuery。但本文的主题是 XPathQ一Uؓ查询 XML 文档而设计的查询语言。比如,下面q个单的 XPath 查询可以在文档中扑ֈ作者ؓ Neal Stephenson 的所有图书的标题Q?/p>
//book[author="Neal Stephenson"]/title

作ؓ对照Q查询同样信息的U?DOM 搜烦代码?清单 1 所C:


清单 1. 扑ֈ Neal Stephenson 所有著?title 元素?DOM 代码
        ArrayList result = new ArrayList();
        NodeList books = doc.getElementsByTagName("book");
        for (int i = 0; i < books.getLength(); i++) {
            Element book = (Element) books.item(i);
            NodeList authors = book.getElementsByTagName("author");
            boolean stephenson = false;
            for (int j = 0; j < authors.getLength(); j++) {
                Element author = (Element) authors.item(j);
                NodeList children = author.getChildNodes();
                StringBuffer sb = new StringBuffer();
                for (int k = 0; k < children.getLength(); k++) {
                    Node child = children.item(k);
                    // really should to do this recursively
                    if (child.getNodeType() == Node.TEXT_NODE) {
                        sb.append(child.getNodeValue());
                    }
                }
                if (sb.toString().equals("Neal Stephenson")) {
                    stephenson = true;
                    break;
                }

            }

            if (stephenson) {
                NodeList titles = book.getElementsByTagName("title");
                for (int j = 0; j < titles.getLength(); j++) {
                    result.add(titles.item(j));
                }
            }

        }

不论您是否相信,清单 1 中的 DOM 昄不如单的 XPath 表达式通用或者健壮。您愿意~写、调试和l护哪一个?我想{案很明显?

但是虽然有很强的表达能力QXPath q不?Java 语言Q事实上 XPath 不是一U完整的~程语言。有很多东西?XPath 表达不出来,甚至有些查询也无法表达。比方说QXPath 不能查找国际标准图书~码QISBNQ检验码不匹配的所有图书,或者找出境外帐h据库昄Ơ帐的所有作者。幸q的是,可以?XPath l合?Java E序中,q样p发挥两者的优势了:Java ?Java 所擅长的,XPath ?XPath 所擅长的?

直到最q,Java E序执行 XPath 查询所需要的应用E序~程接口QAPIQ还因Ş形色色的 XPath 引擎而各不相同。Xalan 有一U?APIQSaxon 使用另一U,其他引擎则用其他的 API。这意味着代码往往把您限制CU品上。理x况下Q最好能够试验具有不同性能特点的各U引擎,而不会带来不适当的麻烦或者重新编写代码?

于是QJava 5 推出?javax.xml.xpath 包,提供一个引擎和对象模型独立?XPath 库。这个包也可用于 Java 1.3 及以后的版本Q但需要单独安?Java API for XML Processing (JAXP) 1.3。Xalan 2.7 ?Saxon 8 以及其他产品包含了这个库的实现?





回页?/font>


一个简单的例子

我将举例说明如何使用它。然后再讨论一些细节问题。假设要查询一个图书列表,L Neal Stephenson 的著作。具体来_q个图书列表的Ş式如 清单 2 所C:


清单 2. 包含图书信息?XML 文档
<inventory>
    <book year="2000">
        <title>Snow Crash</title>
        <author>Neal Stephenson</author>
        <publisher>Spectra</publisher>
        <isbn>0553380958</isbn>
        <price>14.95</price>
    </book>
 
    <book year="2005">
        <title>Burning Tower</title>
        <author>Larry Niven</author>
        <author>Jerry Pournelle</author>
        <publisher>Pocket</publisher>
        <isbn>0743416910</isbn>
        <price>5.99</price>
    <book>
 
    <book year="1995">
        <title>Zodiac</title>
        <author>Neal Stephenson<author>
        <publisher>Spectra</publisher>
        <isbn>0553573862</isbn>
        <price>7.50</price>
    <book>

    <!-- more books... -->
 
</inventory>

抽象工厂

XPathFactory 是一个抽象工厂。抽象工厂设计模式得这一U?API 能够支持不同的对象模型,?DOM、JDOM ?XOM。ؓ了选择不同的模型,需要向 XPathFactory.newInstance() Ҏ传递标识对象模型的l一资源标识W(URIQ。比?http://xom.nu/ 可以选择 XOM。但实际上,到目前ؓ?DOM 是该 API 支持的惟一对象模型?

查找所有图书的 XPath 查询非常单://book[author="Neal Stephenson"]。ؓ了找些图书的标题Q只要增加一步,表达式就变成?//book[author="Neal Stephenson"]/title。最后,真正需要的?title 元素的文本节点孩子。这p求再增加一步,完整的表辑ּ是 //book[author="Neal Stephenson"]/title/text()?

现在我提供一个简单的E序Q它?Java 语言中执行这个查询,然后把找到的所有图书的标题打印出来。首先,需要将文档加蝲C?DOM Document 对象中。ؓ了简化v见,假设该文档在当前工作目录?books.xml 文g中。下面的单代码片D解析文档ƈ建立对应?Document 对象Q?


清单 3. ?JAXP 解析文档
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true); // never forget this!
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("books.xml");

到目前ؓ止,q仅仅是标准?JAXP ?DOMQ没有什么新鲜的?

接下来创?XPathFactoryQ?/p>
XPathFactory factory = XPathFactory.newInstance();

然后使用q个工厂创徏 XPath 对象Q?

XPath xpath = factory.newXPath();

XPath 对象~译 XPath 表达式:

PathExpression expr = xpath.compile("http://book[author='Neal Stephenson']/title/text()");

直接求?/b>

如果 XPath 表达式只使用一ơ,可以跌~译步骤直接?XPath 对象调用 evaluate() Ҏ。但是,如果同一个表辑ּ要重复用多ơ,~译可能更快一些?

最后,计算 XPath 表达式得到结果。表辑ּ是针对特定的上下文节点计的Q在q个例子中是整个文档。还必须指定q回cd。这里要求返回一个节炚wQ?

Object result = expr.evaluate(doc, XPathConstants.NODESET);

可以结果强制{化成 DOM NodeListQ然后遍历列表得到所有的标题Q?

        NodeList nodes = (NodeList) result;
        for (int i = 0; i < nodes.getLength(); i++) {
            System.out.println(nodes.item(i).getNodeValue()); 
        }

清单 4 把上q片D늻合到了一个程序中。还要注意,q些Ҏ可能抛出一些检查异常,q些异常必须?throws 子句中声明,但是我在上面把它们掩盖v来了Q?


清单 4. 用固定的 XPath 表达式查?XML 文档的完整程?/b>
import Java.io.IOException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.xpath.*;

public class XPathExample {

  public static void main(String[] args) 
   throws ParserConfigurationException, SAXException, 
          IOException, XPathExpressionException {

    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true); // never forget this!
    DocumentBuilder builder = domFactory.newDocumentBuilder();
    Document doc = builder.parse("books.xml");

    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    XPathExpression expr 
     = xpath.compile("http://book[author='Neal Stephenson']/title/text()");

    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;
    for (int i = 0; i < nodes.getLength(); i++) {
        System.out.println(nodes.item(i).getNodeValue()); 
    }

  }

}

XPath 数据模型

每当混合使用诸如 XPath ?Java q样两种不同的语aӞ必定会有某些两者粘合在一L明显接缝。ƈ非一切都很合拍。XPath ?Java 语言没有同样的类型系l。XPath 1.0 只有四种基本数据cdQ?/p>

  • node-set
  • number
  • boolean
  • string

当然QJava 语言有更多的数据cdQ包括用户定义的对象cd?/p>

多数 XPath 表达式,特别是位|\径,都返回节炚w。但是还有其他可能。比如,XPath 表达?count(//book) q回文档中的图书数量。XPath 表达?count(//book[@author="Neal Stephenson"]) > 10 q回一个布|如果文档?Neal Stephenson 的著作超q?10 本则q回 trueQ否则返?false?

evaluate() Ҏ被声明ؓq回 Object。实际返回什么依赖于 XPath 表达式的l果以及要求的类型。一般来_XPath ?/p>

  • number 映射?Java.lang.Double
  • string 映射?Java.lang.String
  • boolean 映射?Java.lang.Boolean
  • node-set 映射?org.w3c.dom.NodeList
XPath 2

前面一直假设您使用的是 XPath 1.0。XPath 2 大大扩展和修改了cdpȝ。Java XPath API 支持 XPath 2 所需的主要修Ҏ?XPath 2 新数据类型增加常量?

?Java 中计?XPath 表达式时Q第二个参数指定需要的q回cd。有五种可能Q都?javax.xml.xpath.XPathConstants cM命名了常量:

  • XPathConstants.NODESET
  • XPathConstants.BOOLEAN
  • XPathConstants.NUMBER
  • XPathConstants.STRING
  • XPathConstants.NODE

最后一?XPathConstants.NODE 实际上没有匹配的 XPath cd。只有知?XPath 表达式只q回一个节Ҏ者只需要一个节Ҏ才用它。如?XPath 表达式返回了多个节点q且指定?XPathConstants.NODEQ则 evaluate() 按照文档序q回W一个节炏V如?XPath 表达式选择了一个空集ƈ指定?XPathConstants.NODEQ则 evaluate() q回 null?

如果不能完成要求的{换,evaluate() 抛?XPathException?


名称I间上下?/font>

?XML 文档中的元素在名U空间中Q查询该文档?XPath 表达式必M用相同的名称I间。XPath 表达式不一定要使用相同的前~Q只需要名U空?URI 相同卛_。事实上Q如?XML 文档使用默认名称I间Q那么尽目标文档没有用前~QXPath 表达式也必须使用前缀?

但是QJava E序不是 XML 文档Q因此不能用一般的名称I间解析。必L供一个对象将前缀映射到名U空?URI。该对象?javax.xml.namespace.NamespaceContext 接口的实例。比如,假设图书文档攑֜ http://www.example.com/books 名称I间中,?清单 5 所C:


清单 5. 使用默认名称I间?XML 文档
<inventory xmlns="http://www.example.com/books">
    <book year="2000">
        <title>Snow Crash</title>
        <author>Neal Stephenson</author>
        <publisher>Spectra</publisher>
        <isbn>0553380958</isbn>
        <price>14.95<price>
    </book>

    <!-- more books... -->

<inventory>

查找 Neal Stephenson 全部著作标题?XPath 表达式就要改?//pre:book[pre:author="Neal Stephenson"]/pre:title/text()。但是,必须前~ pre 映射?URI http://www.example.com/books?code>NamespaceContext 接口?Java 软g开发工LQJDKQ或 JAXP 中没有默认实C乎有点笨Q但实如此。不q,自己实现也不难?a >清单 6 对一个名U空间给Z单的实现。还需要映?xml 前缀?


清单 6. l定一个名U空间和默认名称I间的简单上下文
import Java.util.Iterator;
import javax.xml.*;
import javax.xml.namespace.NamespaceContext;

public class PersonalNamespaceContext implements NamespaceContext {

    public String getNamespaceURI(String prefix) {
        if (prefix == null) throw new NullPointerException("Null prefix");
        else if ("pre".equals(prefix)) return "http://www.example.org/books";
        else if ("xml".equals(prefix)) return XMLConstants.XML_NS_URI;
        return XMLConstants.NULL_NS_URI;
    }

    // This method isn't necessary for XPath processing.
    public String getPrefix(String uri) {
        throw new UnsupportedOperationException();
    }

    // This method isn't necessary for XPath processing either.
    public Iterator getPrefixes(String uri) {
        throw new UnsupportedOperationException();
    }

}

使用映射存储l定和增?setter Ҏ实现名称I间上下文的重用也不难?

创徏 NamespaceContext 对象后,在编译表辑ּ之前其安装?XPath 对象上。以后就可以像以前一h用这些前~查询了。比如:


清单 7. 使用名称I间?XPath 查询
  XPathFactory factory = XPathFactory.newInstance();
  XPath xpath = factory.newXPath();
  xpath.setNamespaceContext(new PersonalNamespaceContext());
  XPathExpression expr 
    = xpath.compile("http://pre:book[pre:author='Neal Stephenson']/pre:title/text()");

  Object result = expr.evaluate(doc, XPathConstants.NODESET);
  NodeList nodes = (NodeList) result;
  for (int i = 0; i < nodes.getLength(); i++) {
      System.out.println(nodes.item(i).getNodeValue()); 
  }

函数求解?/font>

有时候,?Java 语言中定义用?XPath 表达式的扩展函数很有用。这些函数可以执行用U?XPath 很难或者无法执行的d。不q必L真正的函敎ͼ而不是随意的Ҏ。就是说不能有副作用。(XPath 函数可以按照L的顺序求gQ意多ơ。)

通过 Java XPath API 讉K的扩展函数必d?javax.xml.xpath.XPathFunction 接口。这个接口只声明了一个方?evaluateQ?

public Object evaluate(List args) throws XPathFunctionException

该方法必返?Java 语言能够转换?XPath 的五U类型之一Q?

  • String
  • Double
  • Boolean
  • Nodelist
  • Node

比如Q?a >清单 8 昄了一个扩展函敎ͼ它检?ISBN 的校验和q返?Boolean。这个校验和的基本规则是前九位数的每一位乘上它的位|(即第一位数乘上 1Q第二位C?2Q依ơ类推)。将q些数加h然后取除?11 的余数。如果余数是 10Q那么最后一位数是 X?


清单 8. ?ISBN ?XPath 扩展函数
import Java.util.List;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class ISBNValidator implements XPathFunction {

  // This class could easily be implemented as a Singleton.
    
  public Object evaluate(List args) throws XPathFunctionException {

    if (args.size() != 1) {
      throw new XPathFunctionException("Wrong number of arguments to valid-isbn()");
    }

    String isbn;
    Object o = args.get(0);

    // perform conversions
    if (o instanceof String) isbn = (String) args.get(0);
    else if (o instanceof Boolean) isbn = o.toString();
    else if (o instanceof Double) isbn = o.toString();
    else if (o instanceof NodeList) {
        NodeList list = (NodeList) o;
        Node node = list.item(0);
        // getTextContent is available in Java 5 and DOM 3.
        // In Java 1.4 and DOM 2, you'd need to recursively 
        // accumulate the content.
        isbn= node.getTextContent();
    }
    else {
        throw new XPathFunctionException("Could not convert argument type");
    }

    char[] data = isbn.toCharArray();
    if (data.length != 10) return Boolean.FALSE;
    int checksum = 0;
    for (int i = 0; i < 9; i++) {
        checksum += (i+1) * (data[i]-'0');
    }
    int checkdigit = checksum % 11;

    if (checkdigit + '0' == data[9] || (data[9] == 'X' && checkdigit == 10)) {
        return Boolean.TRUE;
    }
    return Boolean.FALSE;

  }

}

下一步让q个扩展函数能够?Java E序中用。ؓ此,需要在~译表达式之前向 XPath 对象安装 javax.xml.xpath.XPathFunctionResolver。函数求解器函数的 XPath 名称和名U空?URI 映射到实现该函数?Java cR?a >清单 9 是一个简单的函数求解器,扩展函?valid-isbn 和名U空?http://www.example.org/books 映射?清单 8 中的cR比如,XPath 表达?//book[not(pre:valid-isbn(isbn))] 可以扑ֈ ISBN 校验和不匚w的所有图书?


清单 9. 识别 valid-isbn 扩展函数的上下文
iimport javax.xml.namespace.QName;
import javax.xml.xpath.*;

public class ISBNFunctionContext implements XPathFunctionResolver {

  private static final QName name 
   = new QName("http://www.example.org/books", "valid-isbn");

  public XPathFunction resolveFunction(QName name, int arity) {
      if (name.equals(ISBNFunctionContext.name) && arity == 1) {
          return new ISBNValidator();
      }
      return null;
  }

}

׃扩展函数必须有名U空_所以计包含扩展函数的表达式时必须使用 NamespaceResolverQ即便查询的文档没有使用M名称I间。由?XPathFunctionResolver?code>XPathFunction ?NamespaceResolver 都是接口Q如果方便的话可以将它们攑֜所有的cM?


l束?/font>

?SQL ?XPath q样的声明性语a~写查询Q要比?Java ?C q样的命令式语言Ҏ得多。但是,?Java ?C q样的图灵完整语a~写复杂的逻辑Q又?SQL ?XPath q样的声明性语aҎ得多。所q的是,通过使用 Java Database Connectivity (JDBC) ?javax.xml.xpath 之类?API 可以两者结合v来。随着世界上越来越多的数据转向 XMLQ?code>javax.xml.xpath 与 Java.sql 一样变得越来越重要?/p>

Eric.Zhou 2006-09-18 13:34 发表评论
]]>
XPath的语?/title><link>http://www.aygfsteel.com/rain1102/archive/2006/09/18/70209.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 18 Sep 2006 01:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/rain1102/archive/2006/09/18/70209.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/70209.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2006/09/18/70209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/70209.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/70209.html</trackback:ping><description><![CDATA[     摘要: 当前位置 当我们用XSLT处理XML源文档是Q我们用Context来表C当前正在被模板处理的节点位|。比如xsl:template match="/"语句中表CContext在文档的?root)节点。我不知道如何准的译Contextq个词,它类gC语言里的指针Q表C程序当前运行的位置。理解Context对于正确处理XSL模板非常重要Q当您的XSL模板输出的文档和您想要的不一P最?..  <a href='http://www.aygfsteel.com/rain1102/archive/2006/09/18/70209.html'>阅读全文</a><img src ="http://www.aygfsteel.com/rain1102/aggbug/70209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-18 09:18 <a href="http://www.aygfsteel.com/rain1102/archive/2006/09/18/70209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xslq程解析http://www.aygfsteel.com/rain1102/archive/2006/09/18/70207.htmlEric.ZhouEric.ZhouMon, 18 Sep 2006 01:14:00 GMThttp://www.aygfsteel.com/rain1102/archive/2006/09/18/70207.htmlhttp://www.aygfsteel.com/rain1102/comments/70207.htmlhttp://www.aygfsteel.com/rain1102/archive/2006/09/18/70207.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/70207.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/70207.html<?xml version="1.0" encoding="iso-8859-1"?>

q是标准的XML文档的首行代码,因ؓXSLT本n也是XML文档?br />encoding属性用来定义文档用的~码形式Qiso-8859-1主要支持西欧和北的语言~码?br />如果你想使用体中文,那么应该写成:

<?xml version="1.0" encoding="GB2312"?>

接下ȝ代码?

<xsl:stylesheet  xmlns:xsl="

q是标准的XSLT文g首行代码。xsl:stylesheet代码的意思是文档作Z个样式表?stylesheet)处理?br />xmlns:xsl属性是一个名字空间声明,和XML中的名字I间使用Ҏ一P用来防止元素名称重复和؜乱?br />其中前缀xsl的意思是文档中用的元素遵守W3C的XSLT规范?br />最后的version属性说明样式表只采用XSLT 1.0的标准功能,q也是目前仅有的标准?/p>

<xsl:template match="/">

一?lt;xsl:template>元素定义一个模板规则。属性match="/"说明XML源文档中Q这个模板规则作用的L?/"是一UXPath语法Q我们在后面详l讲qͼq里?/"代表XMLl构树的?root)?/p>

接下ȝ代码?

<html>

<head>

<title>First XSLT Example</title>

</head>

<body>

<p><xsl:value-of select="greeting"/></p>

</body>

</html>

说明Q当模板规则被触发,模板的内容就会控制输出的l果。例子中Q模板大部分内容由HTML?br />素和文本构成。只?lt;xsl:value-of>元素是XSLT语法Q这?lt;xsl:value-of>的作用是拯原文档中?br />一个节点的值到输出文档。而select属性则详细指定要处理的节点名称。这是XPath语法Q?greeting"
的意思就是寻找根节点名ؓgreeting的元素,q用模板来处理这个节炏V具体的是扑ֈ<greeting>
元素Q然后将元素的?hello world"按模板样式拷贝到输出文g?

提示Q由于XML文档是严格的层l构(用IE5查看XML文gQ会看见XML文档cM多兌菜单)Q?br />所以我们Ş象的UXML文档为文档树Q其中每一对元素称作树的一个节炏V根元素是根节炏V?/p>

最后关闭所有元素:

</xsl:template>

</xsl:stylesheet>

 



Eric.Zhou 2006-09-18 09:14 发表评论
]]>
XML技巧五?/title><link>http://www.aygfsteel.com/rain1102/archive/2006/09/18/70202.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 18 Sep 2006 00:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/rain1102/archive/2006/09/18/70202.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/70202.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2006/09/18/70202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/70202.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/70202.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #0099cc 0.75pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: #0099cc 0.75pt solid; PADDING-LEFT: 4pt; BACKGROUND: #ddedfb; PADDING-BOTTOM: 4pt; BORDER-LEFT: #0099cc 0.75pt solid; PADDING-TOP: 4pt; BORDER-BOTTOM: #0099cc 0.75pt solid"> <span lang="EN-US"> <font size="2"> <font face="宋体, MS Song"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"> <strong> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">技?/span> </strong> <strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">1</span> </strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> </span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">  </span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">XmlNode.InnerText</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">.InnerXml</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">的区别是Q前者将内容中的</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"><</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">></span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">分别变成</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"><</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">></span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">Q因此,希望两D?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> XmlDocument </span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">合ƈ的程序只能?/span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <span lang="EN-US"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:p> </o:p> </span> </span> </p> <p class="code" style="MARGIN: 3.75pt"> <br />XmlDocumentFragment.InnerXml = XmlNode.OuterXml<o:p></o:p></p> </font> </font> </span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> </span> <strong> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">技?/span> </strong> <strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">2</span> </strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> <o:p> <p class="code" style="MARGIN: 3.75pt"> <span lang="EN-US"> <font size="2"> <font face="宋体, MS Song">/XPath: string end-with <br /><br /><xsl:for-each select="root/data[substring-after(@name,'.')= 'Text' and string-length(value)>0]"><o:p></o:p></font> </font> </span> </p> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> </span> <strong> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">技?/span> </strong> <strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">3</span> </strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> </span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">  一?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">XML</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">文档?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">Load</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">时如果失败,是Ҏ不合法;是否W合某个</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">Schema</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">Q?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">XSD</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">Q的要求则是有效?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">(valid)</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">查,Ҏ是?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">XmlValidatingReader</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">对象?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">Schemas</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">ValidationType</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">属性?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> </span> <strong> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">技?/span> </strong> <strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">4</span> </strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> </span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">  </span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">XmlDataDocument</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">cL?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">XmlDocument</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">z出来的,最重要的是增加了一?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">DataSet</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">属性。不q这个类不是</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">System.Xml</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">提供的,而是</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">System.Data</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">提供的。对于L要跟数据库打交道的应用程序来_反正是要引用</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">System.Data</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">的,不如全部?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">XmlDataDocument</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> </span> <strong> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">技?/span> </strong> <strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">5</span> </strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '"> <br /> </span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">  如何?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">XmlDataDocument</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">对象中的</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">DataSet</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">更新保存到数据库中?</span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">DataSet</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">本n有一?/span> <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: ' '">AcceptChanges</span> <span style="FONT-SIZE: 10.5pt; COLOR: #333333; FONT-FAMILY: 宋体; mso-ascii-font-family: ' '; mso-hansi-font-family: ' '">ҎQ所以只需要:<br /><br /><span lang="EN-US"><font size="2"><font face="宋体, MS Song">    xmlDataDoc.DataSet.AcceptChanges();</font></font></span></span> </o:p> </span> </div> <p class="code" style="MARGIN: 3.75pt"> <span lang="EN-US"> <font size="2"> <font face="宋体, MS Song"> <o:p> </o:p> </font> </font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US"> <o:p></o:p></span> </p><img src ="http://www.aygfsteel.com/rain1102/aggbug/70202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-18 08:47 <a href="http://www.aygfsteel.com/rain1102/archive/2006/09/18/70202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML文法分析http://www.aygfsteel.com/rain1102/archive/2006/09/18/70200.htmlEric.ZhouEric.ZhouMon, 18 Sep 2006 00:44:00 GMThttp://www.aygfsteel.com/rain1102/archive/2006/09/18/70200.htmlhttp://www.aygfsteel.com/rain1102/comments/70200.htmlhttp://www.aygfsteel.com/rain1102/archive/2006/09/18/70200.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/70200.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/70200.html阅读全文

Eric.Zhou 2006-09-18 08:44 发表评论
]]>
վ֩ģ壺 | | ͸| | ³ľ| | | ͩ®| | ӱʡ| | | ˮ| | | | | | | | ˮ| | ˮ| | | ƽ| | ʡ| | | | ղ| | | | ͨ| | Է| ʻ| | |