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> ...
随机推荐
- Python+Requests接口测试教程(1):Fiddler抓包工具
本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...
- hdu4675 GCD of Sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意: 给定一个长度为n的序列a,且 1<=a[i]<=m,求分别有多少个序列b,使 ...
- 国内5家云服务厂商 HTTPS 安全性测试横向对比
随着 Chrome.Firefox 等浏览器对 HTTPS 的重视,国内众多云服务厂商都相继提供 SSL 证书申购服务,但是大家有没有注意到一个细节,不同厂家申请的 SSL 证书,由于证书性能.功能差 ...
- Tornado模板
--------------------静态文件-------------------- 1.static_path:通过向web.Application类的构造函数传递一个名为static_path ...
- python线程与进程手记
------------------------------线程---------------------------#线程应用的第一种方式:thread模块是比较底层的模块#import threa ...
- Mock Server 入门
Mock Server介绍 什么是mock ? 我在去年的时候介绍一篇幅 python mock的基本使用,http://www.cnblogs.com/fnng/p/5648247.html 主要是 ...
- R0~R16寄存器作用(转)
R0-R3 用作传入函数参数,传出函数返回值.在子程序调用之间,可以将 r0-r3 用于任何用途. 被调用函数在返回之前不必恢复 r0-r3.如果调用函数需要再次使用 r0-r3 的内容,则它 ...
- Apache配置虚拟域名
在作php本地调试的时候,一般都要打上localhost/,如果你的项目层级关系比较多,那你的url地址就会很长. 那我们能不能用一个简短的域名去替代那些一长串无用的字符呢? 那可能有人会问如果我没有 ...
- 【DDD】领域驱动设计实践 —— 业务建模实例(‘发布帖子’)
本文是基于上一篇‘业务建模小招数’的实践,后面的多篇博文类似.本文主要讲解‘发表帖子’场景的业务建模,包括:业务建模.业务模型.示例代码:示例代码会使用java编写,文末附有github地址.相比于& ...
- 201521123088《Java程序设计》第七周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 ArrayList代码分析1.1 解释ArrayList的contains源代码源代码: //contain ...