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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dom 自定义事件_pix4D生成dom

    dom 自定义事件_pix4D生成dom之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试了一下:1.事件失效的原因:(1)bind事件绑定只对dom中存在的元素有效,对于我们后来动态增加的元素是监测不到,所以绑定不了(2)同样,当你使用varaa=docu

    2022年9月11日
    0
  • 正则表达式中/i,/g,/ig,/gi,/m的区别和含义

    正则表达式中/i,/g,/ig,/gi,/m的区别和含义

    2021年11月5日
    62
  • k8s支持的存储_外部存储数据库

    k8s支持的存储_外部存储数据库k8sPV和PVC概述PVPVC生命周期配置存储ConfigMapSecretPV和PVC概述前面我们已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全部掌握,显然不现实。为了能够屏蔽底层存储实现的细节,方便用户使用,kubernetes引入了PV和PVC两种资源对象。PV(Persistent Volume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kubernetes管理员进行创

    2022年8月9日
    3
  • 转置卷积详解

    转置卷积详解转置卷积详解  前面文章对卷积做了讲解,感觉既然重新整理,就将系列概念整体做个梳理,也算是将自己知道的所有东西拿来献丑把。  转置卷积(TransposedConvolution)是后来的叫法,一开始大家都是称逆卷积/反卷积(Deconvolution),这个概念是在图像分割任务中被提出来的,图像分割需要逐像素的操作,对每一个像素做一个分割,将其归类到不同的物体当中。  这个任务大家很自然…

    2022年6月21日
    38
  • db2查看数据库端口

    (1)查询数据库管理器配置参数,查找到端口名[test88:dsadm:/gpfsetl/etldata/lch]db2getdbmcfg|grepSVCENAME TCP/IPServicename                         (SVCENAME)=DB2_dsadm SSLservicename                       …

    2022年4月8日
    183
  • APAP论文阅读笔记[通俗易懂]

    APAP论文阅读笔记[通俗易懂]As-Projective-As-PossibleImageStitchingwithMovingDLT论文阅读笔记论文和代码可以在这个网址找到:https://cs.adelaide.edu.au/~tjchin/apap/一、全文翻译题目:使用移动DLT进行尽可能投影的图像拼接摘要:我们专注于图像拼接的任务,通常通过估计投影扭曲来解决这一问题——当场景是平面的或当视图完全因旋转而不同时,该模型是合理的。这样的条件在实践中很容易被违反,这就产生了使用重影人工制品的缝合结果,这就需要使用去

    2022年9月22日
    0

发表回复

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

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