Dom4J生成xml和包含CDATA问题
在 java注解生成xml和包含CDATA问题里面做了介绍,这里直接贴代码。
1:生成xml的java文件
package com.dufy.test.xml;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
/**
 * 使用DOM4J生成xml并包括CDATA的处理
 * @author aflyun
 * @date 2016.06.16
 *
 */
public class TestGenerateXml { 
	/**
	* @param args
	*/
	public static void main(String[] args) { 
		loadXml(); 
	}
	/**
	 * 生成 document xml
	 */
	public static void loadXml(){
		Document document = DocumentHelper.createDocument();//由DocumentHelper得到一个空的Document
		document.setXMLEncoding("utf-8");//设置xml头条的Encoding
		//addElement写入根节点 addAttribute节点属性的键和值
		Element root = document.addElement("item");//.addAttribute("xmlns", "").addAttribute("版本号", "");
		//由根节点 可以得到下二级的节点
		Element id = root.addElement("id");
		id.addText("35399645973");
		//二级节点
		Element title = root.addElement("title"); 
		title.addText("<![CDATA[补水首选水密码水保湿美白护洗护组合三件]]>");
		Element category = root.addElement("category");
		category.addText("<![CDATA[美妆>保湿>洗护]]>");
		Element url = root.addElement("url");
		url.addText("<![CDATA[http://www.example.com/detail-35399645973]]>");
		Element url_wap = root.addElement("url_wap");
		url_wap.addText("<![CDATA[http://www.example.com/detail-35399645973]]>");
		Element price = root.addElement("price");
		price.addText("310");
		Element promotion_price = root.addElement("promotion_price");
		promotion_price.addText("111");
		Element wap_price = root.addElement("wap_price");
		wap_price.addText("80");
		Element sub_item_ids = root.addElement("sub_item_ids");
			Element sub_item_id = sub_item_ids.addElement("sub_item_id");
			sub_item_id.addText("35399645973_1");
			sub_item_id.addText("35399645973_2");
			sub_item_id.addText("35399645973_3");
		Element detail = root.addElement("<detail>");
		detail.addText("<![CDATA[商品详情,支持html图文混排]]>");
		Element status = root.addElement("status");
		status.addText("1");
		Element pic_main = root.addElement("pic_main");
			Element img_main = pic_main.addElement("img");
			img_main.addElement("url").addText("<![CDATA[http://www.example.com/10777829/T_400x400.jpg]]>");
			img_main.addElement("size").addText("400x400");
		Element pic_extra = root.addElement("pic_extra");
			Element img_extra = pic_extra.addElement("img");
			img_extra.addElement("url").addText("<![CDATA[http://www.example.com/10777829/T_400x400.jpg]]>");
			img_extra.addElement("size").addText("400x400");
			Element img_extr1 = pic_extra.addElement("img");
			img_extr1.addElement("url").addText("<![CDATA[http://www.example.com/10777829/T_400x400.jpg]]>");
			img_extr1.addElement("size").addText("400x400");
		String xml1 = document.asXML();                          //默认转义
		String xml2 = formatXml(document, "utf-8", true);        //转义
		String xml3 = formatXml(document, "utf-8", false);       //不转义
		 System.out.println("--------1111-----------------");
		System.out.println(xml1);
        System.out.println("---------2222----------------");
        System.out.println(xml2);
        System.out.println("---------3333----------------");
        System.out.println(xml3); 
        PrintWriter pw = null;
		try {
			 pw = new PrintWriter(new File("D:/test.xml"));
			 pw.write(xml3);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			pw.close();
		}
	} 
	 /**
     * 格式化XML文档
     *
     * @param document xml文档
     * @param charset    字符串的编码
     * @param istrans    是否对属性和元素值进行转移
     * @return 格式化后XML字符串
     */
    public static String formatXml(Document document, String charset, boolean istrans) {
    		OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding(charset);
            StringWriter sw = new StringWriter();
            XMLWriter xw = new XMLWriter(sw, format);
            xw.setEscapeText(istrans);
            try {
                    xw.write(document);
                    xw.flush();
                    xw.close();
            } catch (IOException e) {
                    System.out.println("格式化XML文档发生异常,请检查!");
                    e.printStackTrace();
            }
            return sw.toString();
    } 
} 
setEscapeText 设置为false,最为重要
2:生成后的xml,上面的第三种才能生成正确的结果!
文件:在D:/test.xml
<?xml version="1.0" encoding="utf-8"?>
<item>
  <id>35399645973</id>
  <title><![CDATA[补水首选水密码水保湿美白护洗护组合三件]]></title>
  <category><![CDATA[美妆>保湿>洗护]]></category>
  <url><![CDATA[http://www.example.com/detail-35399645973]]></url>
  <url_wap><![CDATA[http://www.example.com/detail-35399645973]]></url_wap>
  <price>310</price>
  <promotion_price>111</promotion_price>
  <wap_price>80</wap_price>
  <sub_item_ids>
    <sub_item_id>35399645973_135399645973_235399645973_3</sub_item_id>
  </sub_item_ids>
  <<detail>><![CDATA[商品详情,支持html图文混排]]></<detail>>
  <status>1</status>
  <pic_main>
    <img>
      <url><![CDATA[http://www.example.com/10777829/T_400x400.jpg]]></url>
      <size>400x400</size>
    </img>
  </pic_main>
  <pic_extra>
    <img>
      <url><![CDATA[http://www.example.com/10777829/T_400x400.jpg]]></url>
      <size>400x400</size>
    </img>
    <img>
      <url><![CDATA[http://www.example.com/10777829/T_400x400.jpg]]></url>
      <size>400x400</size>
    </img>
  </pic_extra>
</item>
3:参考文章
(1):Dom4j格式化转义字符问题
欢迎访问我的csdn博客,我们一同成长!
"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"
http://blog.csdn.net/u010648555
Dom4J生成xml和包含CDATA问题的更多相关文章
- java注解生成xml和包含CDATA问题
		
百度java生成xml,有一大推的文章,主要的生成方式一种使用Dom4J ,还有一种使用Jdk自带注解类! 下面主要整理我注解类的使用,(可以参考这篇文章Dom4J生成xml和包含CDATA问题)和x ...
 - 使用DOM4J生成XML文档
		
package xml; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; imp ...
 - dom4j——使用dom4j生成xml
		
使用org.dom4j.Element 创建xml /** * 生成Service.xml文件 * @param tran 交易对象 * @param filePath 文件夹路径 */ public ...
 - 使用Dom4j生成xml文件
		
场景:使用dom4j生成以下xml文件 <?xml version="1.0" encoding="UTF-8"?> <result> ...
 - dom4j生成xml
		
package com.yunfengtech.solution.business; import java.io.FileOutputStream; import org.dom4j.Documen ...
 - Dom4j 生成xml并格式化
		
Document document = DocumentHelper.createDocument(); //创建root Element root = document.addEle ...
 - 使用dom4j生成xml字符串,以及解析xml字符串
		
基于dom4j-1.6.1.jar import java.io.IOException; import java.io.StringWriter; import java.util.ArrayLis ...
 - Java利用dom4j生成xml文件、解析XML
		
package com.fq.fanqi; import java.io.File;import java.io.FileWriter;import java.io.IOException;impor ...
 - 使用Dom4j生成xml文件(utf-8编码)
		
xml文件内容: <?xml version="1.0" encoding="UTF-8"?> <result> <code> ...
 
随机推荐
- jmeter性能测试 套路一
			
真的跑压力,都是master-slave的方式,部署在压力机上跑性能测试 本机一般都是调试.
 - 帆软的报表系统与泛微OA结合起来,这两个软件麦枫提供了经典的服务。
			
一.集成配景泛微OA对企业的代价 泛微协同办公计划能向你供给一个协同的.集成的办公情况,使所有的办公职员都在统一且个性化的信息流派中一路事情, 解脱光阴和地区的限定,实现协同事情与知识治理. Eoco ...
 - MongoDB三节点高可用模式安装
			
设备: 三个1G.20G.1核的虚拟机,系统是SentOS7 min 清除原始自数据目录: rm -fr /home/mongosingle/ 创建目录: mkdir -p /home/mongosi ...
 - 浅谈如何用Java操作MongoDB
			
NoSQL数据库因其可扩展性使其变得越来越流行,利用NoSQL数据库可以给你带来更多的好处,MongoDB是一个用C++编写的可度可扩展性的开源NoSQL数据库.本文主要讲述如何使用Java操作Mon ...
 - hdu  6194 沈阳网络赛--string string string(后缀数组)
			
题目链接 Problem Description Uncle Mao is a wonderful ACMER. One day he met an easy problem, but Uncle M ...
 - C语言中无符号数和有符号数之间的运算
			
C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. un ...
 - [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法
			
我们还是接着上文继续,本文我们要讲的是图片资源的打包,图片在静态排版中,经常出现的两个位置是css通过background引入背景,还有一种就是在html模板文件中用img标签引入的方式,如果要在we ...
 - hdu 2503 1713 1108 最小公倍数&最大公约数
			
gcd模板: __int64 gcd(__int64 a,__int64 b) { retur b==0?a:gcd(b,a%b); } 1108: #include<iostream> ...
 - JTemplates 的使用
			
注意事项:一定要放在Jquery的页面加载完成事件内 : $(function{}); <script src="~/Js/jquery-2.1.0.js">< ...
 - NHibernate教程(11)--多对多关联查询
			
本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...