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)
上一篇 2022年2月25日 下午1:00
下一篇 2022年2月25日 下午1:00


相关推荐

  • windowshello指纹识别器_win10指纹驱动安装失败

    windowshello指纹识别器_win10指纹驱动安装失败首先,需要确认你的电脑安装有指纹识别设备,有的笔记本自带的就是指纹扫描器(例如MS酋长的惠普248G1笔记本),没有的可以考虑加装外设型的指纹识别设备。并且确认已经安装了指纹识别设备的驱动程序,方法是打开“设备管理器”,在其中查看有无“生物识别设备”。如图:然后进入“设置–帐户–登录选项”,即可在右侧空格中找到“WindowsHello”设置项。如图:点击“指纹”下的“设置”按钮,会…

    2022年8月10日
    23
  • 单例模式的使用总结

    单例模式的使用总结目录一、单例模式的定义和应用场景(一)定义及基本要点(二)应用场景二、饿汉式单例模式(一)基本代码展示分析(二)基本分析和建议三、懒汉式单例模式(双重检查锁)(一)基本代码展示分析(二)基本分析和建议四、静态内部类实现单例模式(一)基本代码展示分析(二)基本分析和建议五、注册式单例模式(一)枚举式单例模式代码及分析:(EffectiveJa…

    2022年7月25日
    10
  • java指令重排_jvm指令重排

    java指令重排_jvm指令重排引言:在Java中看似顺序的代码在JVM中,可能会出现编译器或者CPU对这些操作指令进行了重新排序;在特定情况下,指令重排将会给我们的程序带来不确定的结果…..1.什么是指令重排?在计算机执行指令的顺序在经过程序编译器编译之后形成的指令序列,一般而言,这个指令序列是会输出确定的结果;以确保每一次的执行都有确定的结果。但是,一般情况下,CPU和编译器为了提升程序执行的效率,会按照一定的规则允…

    2022年10月18日
    4
  • WLAN 与WIFI的区别?

    WLAN 与WIFI的区别?一、WIFIWIFI是一种可以将个人电脑、手持设备(如PDA、手机)等终端以无线方式互相连接的技术。WIFI技术与蓝牙技术一样,同属于在办公室和家庭中使用的短距离无线技术。Wi-Fi原先是无线保真的缩写,Wi-Fi的英文全称为wirelessfidelity,在无线局域网的范畴是指“无线相容性认证”,实质上是一种商业认证,同时也是一种无线联网的技术,以前通过网线连接电脑,而现在则…

    2022年7月11日
    20
  • OpenClaw国内大模型配置指南:MiniMax、GLM、Kimi、Doubao、Qwen及通用接入方案

    OpenClaw国内大模型配置指南:MiniMax、GLM、Kimi、Doubao、Qwen及通用接入方案

    2026年3月13日
    4
  • minipcie串口卡_minipcie接口定义图解

    minipcie串口卡_minipcie接口定义图解简介LCminiPCIe系列miniPCIe接口CAN卡,具有1~2路CAN通道和一路PCIExpressmini接口,插到工控机或单板电脑的PCIExpressmini卡槽上,快速扩展出1~2路CAN通道。CAN接口电气隔离高达2500VDC,具有优秀的EMC性能,可靠性测试项目:ESD接触放电8KV、浪涌±1KV、脉冲群±2KV,工业级,通过CE-EMC和FCC认证。配套测试软件L…

    2025年10月5日
    4

发表回复

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

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