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


相关推荐

  • c语言code用法_visual code c语言

    c语言code用法_visual code c语言此文章出处:http://www.cppblog.com/izualzhy/archive/2012/07/09/182456.html先看个例子:汉字一的UTF-8编码为0xE40xb80x80我们在google里搜索一下“一”,地址栏显示为:可以看到url的字符串里有一个%E4%B8%80这就是encode之后的值。因此,encode的处理过程也很明显了。特别是传中文参数时,如果没…

    2022年9月28日
    0
  • Vue(3)webstorm代码格式规范设置与vue模板配置

    Vue(3)webstorm代码格式规范设置与vue模板配置编译器代码格式规范设置通常我们写代码时,代码缩进都是4个空格,但是在前端中,据全球投票统计,建议使用2个空格来进行代码缩进。首先我们打开webstorm中的设置,如果使用的是mac的同学直接使用c

    2022年7月31日
    93
  • 信道和带宽_信道带宽怎么计算

    信道和带宽_信道带宽怎么计算信道和带宽在用cmw500测试不同band下的throughput时,发现module在某几个band注册不上小区。后来经过同事顺滑的演示,得知是因为不同band支持不同的带宽,而我一直设置cmw500的Cellbandwidth=20MHZ,对于那些最大只支持10MHZ的band自然注册不上。关于不同Band支持的带宽可以参考下表(3GPPTS36.101V17.2.0(2021-06))Table5.6.1-1:E-UTRAchannelbandwidth结尾处分享一

    2022年10月7日
    0
  • java分页计算_java分页算法「建议收藏」

    java分页计算_java分页算法「建议收藏」关键字:j2ee网页struts分页算法/***分页算法*/packagecn.eshore.user.util;publicclassPageBean{privateintcurrentPage=1;//当前页数publicinttotalPages=0;//总页数privateintpageSize=0;//每页显示数privateintto…

    2022年10月3日
    0
  • 子网划分习题及考点分析(含答案及理解)

    子网划分习题及考点分析(含答案及理解)Mon21Mon28Mon04已完成进行中计划中现有任务子网划分一、选择题:1.92.168.1.0/24使用掩码255.255.255.240划分子网,其子网数为(),每个子网内可用主机地址数为()A.1414B.1614C.2546D.1462解析:(1)掩码255.255.255.240为28位,28-24=4网络位向主机位借用了4位,子网数为2的4次

    2022年6月27日
    43
  • 互联网广告综述之点击率特征工程

    互联网广告综述之点击率特征工程

    2021年9月11日
    52

发表回复

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

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