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格式化转义字符问题

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dubbo负载均衡策略

    dubbo负载均衡策略121212dubbo负载均衡策略RandomLoadBalance–随机负载均衡默认情况下,dubbo是RandomLoadBalance,随机调用实现负载均衡,可以对不同provider设置不同

    2022年7月4日
    20
  • idea下载及汉化

    idea下载及汉化安装软件和汉化插件下载地址 链接:https://pan.baidu.com/s/1ftvTcFvx0ett7IQhU7Hltg 提取码:b43t 复制这段内容后打开百度网盘手机App,操作更方便哦 现在安装idea–>基本大家都会 汉化: 不是很建议使用汉化版本的.但是原界面对新手不是很友好,也有人说汉化后的界面有的按钮会报错,算了..开始正题吧 先把汉化文件夹…

    2022年6月1日
    119
  • pycharm远程调试python_pycharm调试教程

    pycharm远程调试python_pycharm调试教程pycharm远程开发与调试0.为pycharm添加远程服务器配置如果你已经为该服务器配置过远程服务器,可忽略此步骤。打开pycharm,tools-&amp;amp;amp;amp;gt;Deployment-&amp;amp;amp;amp;gt;Configuration,在左边栏点“+“号添加远程服务器。右边配置如下图,只需要配置connection,注意”Visibleonlyforthisproject”的勾去掉!…

    2022年8月29日
    9
  • Excel VBA宏编程入门(五)——用户交互[通俗易懂]

    Excel VBA宏编程入门(五)——用户交互[通俗易懂]目录任务介绍选择文件夹选择文件保存路径交互选择一列交互选择一行任务介绍VBA编程中,为了程序的灵活性,有时候需要用到用户交互操作,例如让用户选择一个文件夹,用户选择一个单元格等等。本文将介绍一些常用的用户交互操作的实现选择文件夹St=Application.FileDialog(msoFileDialogFolderPicker).Show’如果选择了文件夹就返回-1,不选择文件夹就返回0IfSt<>0ThenfileDir=Application.File

    2022年6月2日
    37
  • this指针的原理

    this指针的原理讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一个思路从应用的角度来讲解this指针,从这个角度理解this指针更加有现实意义。  下面我们看看在java语言里是如何使用this指针的,代码如下:复制代码publicclassPerson{privateStringname;priva

    2022年5月17日
    52
  • GoogLeNet论文详解[通俗易懂]

    GoogLeNet论文详解[通俗易懂]GoogLeNet1.Introduction  得益于深度学习的优势和更强大的卷积神经网络的出现,图像分类和目标检测的准确率发生了令人意想不到的进步。在2014年的ILSVRC比赛中,GoogLeNet取得了第一名的成绩,所用模型参数不足AlexNet(2012年冠军)的1/12。论文题目《Goingdeeperwithconvolutions》中的deeper有两层含义…

    2022年8月14日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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