<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>夜半难眠 &#187; Java</title>
	<atom:link href="http://www.havenliu.com/tag/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.havenliu.com</link>
	<description>记录点生活的无奈</description>
	<lastBuildDate>Thu, 29 Dec 2011 03:25:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>java生成复杂word文档的完美解决方案</title>
		<link>http://www.havenliu.com/java/514.html</link>
		<comments>http://www.havenliu.com/java/514.html#comments</comments>
		<pubDate>Fri, 22 Oct 2010 12:37:16 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=514</guid>
		<description><![CDATA[更新：我比较懒。呃。。。应该说是很懒，其实很不想添加这段文字，但随着越来越多的朋友发邮件问我这个问题，而我又要每封邮件都答复一样的问题，觉得是一件比较悲剧的事情，所有还是来更新一下。
很多朋友照着我说的方法生成的文档都遇到了乱码的问题，我觉得有一定编程经验的都曾经遇到乱码，这应该属于老问题，当然解决方法也很多，Google一下一般都能解决【这也是我不想来更新的原因】。要解决这个Demo的乱码问题。只需要在java输出文件流的时候转下编码就行了。将DoucmentHandler.java第45行改成如下方式：out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), &#8220;UTF-8&#8243;));当然你得根据你的实际开发环境来设置编码格式，不一定非得是UTF-8。
客户要求用程序生成标准的word文档，要能打印，而且不能变形，以前用过很多解决方案，都在客户严格要求下牺牲的无比惨烈。
POI读word文档还行，写文档实在不敢恭维，复杂的样式很难控制不提，想象一下一个20多页，嵌套很多表格和图像的word文档靠POI来写代码输出，对程序员来说比去山西挖煤还惨，况且文档格式还经常变化。
iText操作Excel还行。对于复杂的大量的word也是噩梦。
直接通过JSP输出样式基本不达标，而且要打印出来就更是惨不忍睹。
Word从2003开始支持XML格式，用XML还做就很简单了。
大致的思路是先用office2003或者2007编辑好word的样式，然后另存为xml，将xml翻译为FreeMarker模板，最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准，样式、内容控制非常便利，打印也不会变形，生成的文档和office中编辑文档完全一样。
看看实际效果：
首先用office【版本要2003以上，以下的不支持xml格式】编辑文档的样式，图中红线的部分就是我要输出的部分span id=&#8221;more-514&#8243;>
将编辑好的文档另存为XML
再用Firstobject free XML editor【Firstobject free XML editor的使用见这里】将xml中我们需要填数据的地方打上FreeMarker标记【FreeMarker的语法见这里】
最后生成的文档样式
主要程序代码：

?View Code JAVApackage com.havenliu.document;
&#160;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
&#160;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
&#160;
public class DocumentHandler &#123;
	private Configuration configuration = null;
&#160;
	public DocumentHandler&#40;&#41; &#123;
		configuration = new Configuration&#40;&#41;;
		configuration.setDefaultEncoding&#40;&#34;utf-8&#34;&#41;;
	&#125;
&#160;
	public void createDoc&#40;&#41; &#123;
		//要填入模本的数据文件
		Map dataMap=new HashMap&#40;&#41;;
		getData&#40;dataMap&#41;;
		//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet，classpath，数据库装载，
		//这里我们的模板是放在com.havenliu.document.template包下面
		configuration.setClassForTemplateLoading&#40;this.getClass&#40;&#41;, &#34;/com/havenliu/document/template&#34;&#41;;
		Template t=null;
		try &#123;
			//test.ftl为要装载的模板
			t = configuration.getTemplate&#40;&#34;test.ftl&#34;&#41;;
		&#125; catch &#40;IOException [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff9900;">更新：我比较懒。呃。。。应该说是很懒，其实很不想添加这段文字，但随着越来越多的朋友发邮件问我这个问题，而我又要每封邮件都答复一样的问题，觉得是一件比较悲剧的事情，所有还是来更新一下。</span></p>
<p><span style="color: #ff9900;">很多朋友照着我说的方法生成的文档都遇到了乱码的问题，我觉得有一定编程经验的都曾经遇到乱码，这应该属于老问题，当然解决方法也很多，Google一下一般都能解决【这也是我不想来更新的原因】。要解决这个Demo的乱码问题。只需要在java输出文件流的时候转下编码就行了。将DoucmentHandler.java第45行改成如下方式：out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), &#8220;UTF-8&#8243;));当然你得根据你的实际开发环境来设置编码格式，不一定非得是UTF-8。</span></p>
<p>客户要求用程序生成标准的word文档，要能打印，而且不能变形，以前用过很多解决方案，都在客户严格要求下牺牲的无比惨烈。</p>
<p>POI读word文档还行，写文档实在不敢恭维，复杂的样式很难控制不提，想象一下一个20多页，嵌套很多表格和图像的word文档靠POI来写代码输出，对程序员来说比去山西挖煤还惨，况且文档格式还经常变化。</p>
<p>iText操作Excel还行。对于复杂的大量的word也是噩梦。</p>
<p>直接通过JSP输出样式基本不达标，而且要打印出来就更是惨不忍睹。</p>
<p>Word从2003开始支持XML格式，用XML还做就很简单了。</p>
<p>大致的思路是先用office2003或者2007编辑好word的样式，然后另存为xml，将xml翻译为FreeMarker模板，最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准，样式、内容控制非常便利，打印也不会变形，生成的文档和office中编辑文档完全一样。</p>
<p>看看实际效果：</p>
<p>首先用office<span style="color: #ff6600;">【版本要2003以上，以下的不支持xml格式】</span>编辑文档的样式，图中红线的部分就是我要输出的部分：
<a href="http://www.havenliu.com/wp-content/gallery/blogpic/doc1.jpg" title="" rel="lightbox[singlepic389]" >
	<img class="ngg-singlepic" src="http://www.havenliu.com/wp-content/gallery/cache/389__640x480_doc1.jpg" alt="doc1" title="doc1" />
</a>
<span id="more-514"></span></p>
<p>将编辑好的文档另存为XML<br />

<a href="http://www.havenliu.com/wp-content/gallery/blogpic/doc2.jpg" title="" rel="lightbox[singlepic390]" >
	<img class="ngg-singlepic" src="http://www.havenliu.com/wp-content/gallery/cache/390__640x480_doc2.jpg" alt="doc2" title="doc2" />
</a>
</p>
<p>再用Firstobject free XML editor<span style="color: #ff6600;">【Firstobject free XML editor的使用见<a href="http://www.havenliu.com/java/511.html">这里</a>】</span>将xml中我们需要填数据的地方打上FreeMarker标记<span style="color: #ff6600;">【FreeMarker的语法见<a href="http://www.havenliu.com/goodarticle/420.html">这里</a>】</span><br />

<a href="http://www.havenliu.com/wp-content/gallery/blogpic/doc3.jpg" title="" rel="lightbox[singlepic391]" >
	<img class="ngg-singlepic" src="http://www.havenliu.com/wp-content/gallery/cache/391__640x480_doc3.jpg" alt="doc3" title="doc3" />
</a>
</p>
<p>最后生成的文档样式<br />

<a href="http://www.havenliu.com/wp-content/gallery/blogpic/doc4.jpg" title="" rel="lightbox[singlepic392]" >
	<img class="ngg-singlepic" src="http://www.havenliu.com/wp-content/gallery/cache/392__640x480_doc4.jpg" alt="doc4" title="doc4" />
</a>
<br />
主要程序代码：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p514code2'); return false;">View Code</a> JAVA</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5142"><td class="code" id="p514code2"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.havenliu.document</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.BufferedWriter</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.File</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.FileNotFoundException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.FileOutputStream</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.OutputStreamWriter</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.Writer</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.ArrayList</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.HashMap</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.List</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Map</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">freemarker.template.Configuration</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">freemarker.template.Template</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">freemarker.template.TemplateException</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DocumentHandler <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> Configuration configuration <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> DocumentHandler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		configuration <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Configuration<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		configuration.<span style="color: #006633;">setDefaultEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;utf-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> createDoc<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//要填入模本的数据文件</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amap+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Map</span></a> dataMap<span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ahashmap+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">HashMap</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		getData<span style="color: #009900;">&#40;</span>dataMap<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet，classpath，数据库装载，</span>
		<span style="color: #666666; font-style: italic;">//这里我们的模板是放在com.havenliu.document.template包下面</span>
		configuration.<span style="color: #006633;">setClassForTemplateLoading</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;/com/havenliu/document/template&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		Template t<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">//test.ftl为要装载的模板</span>
			t <span style="color: #339933;">=</span> configuration.<span style="color: #006633;">getTemplate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test.ftl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #666666; font-style: italic;">//输出文档路径及名称</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a> outFile <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">File</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;D:/temp/outFile.doc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Awriter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Writer</span></a> out <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			out <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abufferedwriter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">BufferedWriter</span></a><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aoutputstreamwriter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">OutputStreamWriter</span></a><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afileoutputstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">FileOutputStream</span></a><span style="color: #009900;">&#40;</span>outFile<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afilenotfoundexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">FileNotFoundException</span></a> e1<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e1.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			t.<span style="color: #006633;">process</span><span style="color: #009900;">&#40;</span>dataMap, out<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TemplateException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * 注意dataMap里存放的数据Key值要与模板中的参数相对应
	 * @param dataMap
	 */</span>
	 <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> getData<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amap+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Map</span></a> dataMap<span style="color: #009900;">&#41;</span>
	  <span style="color: #009900;">&#123;</span>
		  dataMap.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;author&quot;</span>, <span style="color: #0000ff;">&quot;张三&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  dataMap.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;remark&quot;</span>, <span style="color: #0000ff;">&quot;这是测试备注信息&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">List</span></a>
 _table1<span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aarraylist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ArrayList</span></a>
<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		  Table1 t1<span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> Table1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  t1.<span style="color: #006633;">setDate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;2010-10-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  t1.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;制定10月开发计划内容。&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  _table1.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>t1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		  Table1 t2<span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> Table1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  t2.<span style="color: #006633;">setDate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;2010-10-2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  t2.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;开会讨论开发计划&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  _table1.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>t2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		  dataMap.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;table1&quot;</span>, _table1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		  <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">List</span></a>
 _table2<span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aarraylist+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ArrayList</span></a>
<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
		  <span style="color: #009900;">&#123;</span>
			  Table2 _t2<span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> Table2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			  _t2.<span style="color: #006633;">setDetail</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;测试开发计划&quot;</span><span style="color: #339933;">+</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			  _t2.<span style="color: #006633;">setPerson</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;张三——&quot;</span><span style="color: #339933;">+</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			  _t2.<span style="color: #006633;">setBegindate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;2010-10-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			  _t2.<span style="color: #006633;">setFinishdate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;2010-10-31&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			  _t2.<span style="color: #006633;">setRemark</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;备注信息&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			  _table2.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>_t2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		  <span style="color: #009900;">&#125;</span>
		  dataMap.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;table2&quot;</span>, _table2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>完整源代码下载<span style="color: #ff6600;">【是eclipse工程，直接导入即可运行】</span>：<a href="http://www.havenliu.com/download/undelete/Document.rar">下载</a></p>
<div style="float:left;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.havenliu.com/java/514.html"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div><h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年07月2日 -- <a href="http://www.havenliu.com/java/92.html" title="Java生成XML文档的基本操作">Java生成XML文档的基本操作</a></li><li>2009年06月2日 -- <a href="http://www.havenliu.com/java/12.html" title="再次遇到a different object with the same identifier value was already associated with the session错误">再次遇到a different object with the same identifier value was already associated with the session错误</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/java/514.html/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Java生成XML文档的基本操作</title>
		<link>http://www.havenliu.com/java/92.html</link>
		<comments>http://www.havenliu.com/java/92.html#comments</comments>
		<pubDate>Thu, 02 Jul 2009 11:45:11 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jdom]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=92</guid>
		<description><![CDATA[利用JDOM生成XML文档，JDOM.jar的官方下载地址：点击这里，官方网址是http://www.jdom.org，下面代码可以下载后直接执行：

?View Code JAVApackage com.haven.reply.serviceimpl;
&#160;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jdom.Comment;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
&#160;
public class JavaXMLDaoImpl &#123;
&#160;
	public void createXMLDoc&#40;&#41; &#123;
		// 创建根节点 root;
		Element root = new Element&#40;&#34;root&#34;&#41;;
&#160;
		// 根节点添加到文档中； 根节点是唯一的
		Document Doc = new Document&#40;root&#41;;
&#160;
		// 下面开始向XML文档中插入数据
		// 创建节点elemets1;
		Element elements1 = new Element&#40;&#34;elemets1&#34;&#41;;
&#160;
		// 给 elemets 节点添加属性 name;
		elements1.setAttribute&#40;&#34;name&#34;, &#34;test1&#34;&#41;;
&#160;
		// 给 elemets 节点添加子节点并赋值；
		elements1.addContent&#40;new Element&#40;&#34;note1-1&#34;&#41;.setText&#40;&#34;value1-1&#34;&#41;&#41;;
		elements1.addContent&#40;new Element&#40;&#34;note1-2&#34;&#41;.setText&#40;&#34;value1-2&#34;&#41;&#41;;
		// 添加一个注释
		elements1.addContent&#40;new Comment&#40;&#34;This is Comment!!!!&#34;&#41;&#41;;
		elements1.addContent&#40;new Element&#40;&#34;note1-3&#34;&#41;.setText&#40;&#34;value1-3&#34;&#41;&#41;;
&#160;
		// 给父节点list添加user子节点;
		root.addContent&#40;elements1&#41;;
&#160;
		// 继续创建节点elemets2;方法和步骤和elemets1完全一样
		Element elements2 = [...]]]></description>
			<content:encoded><![CDATA[<p>利用JDOM生成XML文档，JDOM.jar的官方下载地址：<a href="http://www.jdom.org/downloads/source.html">点击这里</a>，官方网址是http://www.jdom.org，下面代码可以下载后直接执行：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p92code5'); return false;">View Code</a> JAVA</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p925"><td class="code" id="p92code5"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.haven.reply.serviceimpl</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.FileNotFoundException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.FileOutputStream</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jdom.Comment</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jdom.Document</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jdom.Element</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jdom.output.Format</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jdom.output.XMLOutputter</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JavaXMLDaoImpl <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> createXMLDoc<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// 创建根节点 root;</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a> root <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;root&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 根节点添加到文档中； 根节点是唯一的</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adocument+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Document</span></a> Doc <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adocument+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Document</span></a><span style="color: #009900;">&#40;</span>root<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 下面开始向XML文档中插入数据</span>
		<span style="color: #666666; font-style: italic;">// 创建节点elemets1;</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a> elements1 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;elemets1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 给 elemets 节点添加属性 name;</span>
		elements1.<span style="color: #006633;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;name&quot;</span>, <span style="color: #0000ff;">&quot;test1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 给 elemets 节点添加子节点并赋值；</span>
		elements1.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;note1-1&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;value1-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		elements1.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;note1-2&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;value1-2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// 添加一个注释</span>
		elements1.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Comment<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;This is Comment!!!!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		elements1.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;note1-3&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;value1-3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 给父节点list添加user子节点;</span>
		root.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span>elements1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 继续创建节点elemets2;方法和步骤和elemets1完全一样</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a> elements2 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;elemets2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 给 elemets 节点添加属性 name;</span>
		elements2.<span style="color: #006633;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;name&quot;</span>, <span style="color: #0000ff;">&quot;test2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 给 elemets 节点添加子节点并赋值；</span>
		elements2.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;note2-1&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;value2-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		elements2.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;note2-2&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;value2-2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		elements2.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Comment<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;This is Comment!!!!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		elements2.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Element</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;note2-3&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;value2-3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		root.<span style="color: #006633;">addContent</span><span style="color: #009900;">&#40;</span>elements2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 下面是美化工作，如果不进行排版，生成的XML全部在一行显示。可读性很差</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aformat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Format</span></a> format <span style="color: #339933;">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aformat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Format</span></a>.<span style="color: #006633;">getCompactFormat</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		format.<span style="color: #006633;">setEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		format.<span style="color: #006633;">setIndent</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;    &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 缩进4个空格后换行</span>
&nbsp;
		XMLOutputter XMLOut <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> XMLOutputter<span style="color: #009900;">&#40;</span>format<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// test.xml为生成的xml文档名</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			XMLOut.<span style="color: #006633;">output</span><span style="color: #009900;">&#40;</span>Doc, <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afileoutputstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">FileOutputStream</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afilenotfoundexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">FileNotFoundException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			JavaXMLDaoImpl j2x <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JavaXMLDaoImpl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;生成 mxl 文件...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			j2x.<span style="color: #006633;">createXMLDoc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Exception</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>下面是生成好以后的XML文档样式：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p92code6'); return false;">View Code</a> XML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p926"><td class="code" id="p92code6"><pre class="xml" style="font-family:monospace;">&nbsp;
        value1-1
        value1-2
        <span style="color: #808080; font-style: italic;">&lt;!--This is Comment!!!!--&gt;</span>
        value1-3
&nbsp;
        value2-1
        value2-2
        <span style="color: #808080; font-style: italic;">&lt;!--This is Comment!!!!--&gt;</span>
        value2-3</pre></td></tr></table></div>

<p>下次有时间再把JDOM解析XML的代码写一下，今天先到这里<br />
欢迎转载，转载时请指明出处！</p>
<div style="float:left;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.havenliu.com/java/92.html"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div><h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2010年10月22日 -- <a href="http://www.havenliu.com/java/514.html" title="java生成复杂word文档的完美解决方案">java生成复杂word文档的完美解决方案</a></li><li>2010年10月21日 -- <a href="http://www.havenliu.com/java/511.html" title="XML文件编辑和格式化的利器：Firstobject free XML editor ">XML文件编辑和格式化的利器：Firstobject free XML editor </a></li><li>2009年07月29日 -- <a href="http://www.havenliu.com/java/165.html" title="Dom4j生成XML文件，并解决乱码问题">Dom4j生成XML文件，并解决乱码问题</a></li><li>2009年06月2日 -- <a href="http://www.havenliu.com/java/12.html" title="再次遇到a different object with the same identifier value was already associated with the session错误">再次遇到a different object with the same identifier value was already associated with the session错误</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/java/92.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>再次遇到a different object with the same identifier value was already associated with the session错误</title>
		<link>http://www.havenliu.com/java/12.html</link>
		<comments>http://www.havenliu.com/java/12.html#comments</comments>
		<pubDate>Wed, 03 Jun 2009 04:24:15 +0000</pubDate>
		<dc:creator>Haven</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[hiberate]]></category>
		<category><![CDATA[错误]]></category>

		<guid isPermaLink="false">http://www.havenliu.com/?p=12</guid>
		<description><![CDATA[这错误以前遇到过一次，我是这样解决的：
正常情况一般调用hiberate端方法进行数据库操作时，是直接调用 getHibernateTemplate().update(user);，但在hibernate中同一个session里面有了两个相同标识但是是 不同实体时就会出现如标题的错误，在网上找来如下解决方法，错误是解决了，但不完美：
public void update(User user) {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
session.clear();
session.update(user);
}
这 样在session.update(user)后如果还有其他对数据库的save或update并且是在同一个事务中，后面的操作可能就会无效，具体原因 没查出来，可能是getcurrentSession()获取的是“当前”session,调用getcurrentSession()时“当前 ”session被从hibernate中剥离，所以导致了后面的操作无效。
如果是struts+hibernate+spring框架下面有个很简单的方法：直接调用getHibernateTemplate().merge(user)。一切搞定！
相关文章2010年10月22日 -- java生成复杂word文档的完美解决方案2009年07月2日 -- Java生成XML文档的基本操作]]></description>
			<content:encoded><![CDATA[<p>这错误以前遇到过一次，我是这样解决的：<br />
正常情况一般调用hiberate端方法进行数据库操作时，是直接调用 getHibernateTemplate().update(user);，但在hibernate中同一个session里面有了两个相同标识但是是 不同实体时就会出现如标题的错误，在网上找来如下解决方法，错误是解决了，但不完美：<br />
public void update(User user) {</p>
<p>Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();<br />
session.clear();<br />
session.update(user);</p>
<p>}<br />
这 样在session.update(user)后如果还有其他对数据库的save或update并且是在同一个事务中，后面的操作可能就会无效，具体原因 没查出来，可能是getcurrentSession()获取的是“当前”session,调用getcurrentSession()时“当前 ”session被从hibernate中剥离，所以导致了后面的操作无效。<br />
如果是struts+hibernate+spring框架下面有个很简单的方法：直接调用getHibernateTemplate().merge(user)。一切搞定！</p>
<div style="float:left;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.havenliu.com/java/12.html"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div><h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2010年10月22日 -- <a href="http://www.havenliu.com/java/514.html" title="java生成复杂word文档的完美解决方案">java生成复杂word文档的完美解决方案</a></li><li>2009年07月2日 -- <a href="http://www.havenliu.com/java/92.html" title="Java生成XML文档的基本操作">Java生成XML文档的基本操作</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.havenliu.com/java/12.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

