Dom4J生成xml和包含CDATA问题

在 java注解生成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格式化转义字符问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121231.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 阿里云分析数据库_阿里云用的什么数据库

    阿里云分析数据库_阿里云用的什么数据库前言由于工作中应用到了阿里的分析型数据库产品,虽然它类似于mysql,但又有一些区别,通过好好的了解它,才能解决自己的性能优化方面的疑惑。一、定义从官方文档了解到其的定义为:阿里云分析型数据库AnalyticDB(简称ADB),是云端托管的PB级高并发实时数据仓库,是专注于服务OLAP领域的数据仓库。在数据存储模型上,采用关系模型进行数据存储,可以使用SQL进行自由灵活的计算分析,无需预…

  • 安装vmware一直报缺少dll_vmware安装问题

    安装vmware一直报缺少dll_vmware安装问题MicrosoftRuntimeDLL安装程序未能完成安装不要说什么去打开%temp%,治标不治本,如果后面无法输入密钥的话,两个问题堆在一起根本解决不了。MicrosoftRuntimeDLL安装程序未能完成安装:这个问题的最直接解决办法是服务没打开,打开控制面板-管理工具-服务确认以下两个服务是打开的:WindowsInstaller;WindowsModulesInst…

  • linux vim命令保存退出_vim退出命令

    linux vim命令保存退出_vim退出命令使用vim命令打开一个文件:例如,打开openwrt系统下的system配置文件vim/etc/config/system内容如下:configsystemoptionhostname’OpenWrt’optiontimezone’UTC’optionttylogin’0’optionlog_size’64’optionurandom_seed’0’configtimeserve

  • dmesg的使用「建议收藏」

    dmesg的使用「建议收藏」1.dmesg命令–>用来显示开机信息,kernel会将开机信息存储在ringbuffer中。开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log/dmesg2.【dmesg命令作用】:有时候屏幕上的启动信息一闪而过,我们无法查看到具体信息,又或者服务器在电信机房,更看不到开机启动信息。这时候linux提供了dmesg这条命令。在命令行下…

    2022年10月28日
  • 区块链与联邦学习的研究

    区块链与联邦学习的研究本文分别介绍了区块链与联邦学习的研究现状、架构和运行原理、主要技术及局限性,并针对区块链与联邦学习所存在的问题,通过分析区块链与联邦学习各自的特点,探讨了如何将区块链与联邦学习进行融合互补,介绍了两种融合模型及其应用场景。1区块链概述1.1 区块链的研究现状2008年10月,化名为“中本聪”的学者在密码学论坛上公开了《比特币:一种点对点的电子现金系统》一文[1],提出了利用PoW和时间戳机制构造交易区块的链式结构,剔除了可信第三方,实现了去中心化的匿名支付。比特币于2009年1月上线并发布创世块,.

  • 中文停用词_中文停用词哪个

    中文停用词_中文停用词哪个!"#$%&'()*+,…………………………../.一.数.日///0123456789:://::;<=>>&g

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号