zoukankan      html  css  js  c++  java
  • XStream 工具类 [ XmlUtil ]


    pom.xml

    
    <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.10</version>
    </dependency>
    
    


    XmlUtil.java

    
    package com.app.core.util;
    
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.core.util.QuickWriter;
    import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
    import com.thoughtworks.xstream.io.naming.NoNameCoder;
    import com.thoughtworks.xstream.io.xml.CompactWriter;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
    import com.thoughtworks.xstream.io.xml.XppDriver;
    
    import java.io.StringWriter;
    import java.io.Writer;
    import java.nio.charset.StandardCharsets;
    
    public class XmlUtil {
        /**
         * 转换不带CDDATA的XML
         *
         * @return
         * @
         */
        private static XStream getXStream() {
            // 实例化XStream基本对象
            XStream xstream = new XStream(new DomDriver(StandardCharsets.UTF_8.name(), new NoNameCoder() {
                // 不对特殊字符进行转换,避免出现重命名字段时的“双下划线”
                public String encodeNode(String name) {
                    return name;
                }
            }));
            // 忽视XML与JAVABEAN转换时,XML中的字段在JAVABEAN中不存在的部分
            xstream.ignoreUnknownElements();
            return xstream;
        }
    
        /**
         * 转换带CDDATA的XML
         *
         * @return
         * @
         */
        private static XStream getXStreamWithCData() {
            // 实例化XStream扩展对象
            XStream xstream = new XStream(new XppDriver() {
                // 扩展xstream,使其支持CDATA块
                public HierarchicalStreamWriter createWriter(Writer out) {
                    return new PrettyPrintWriter(out) {
                        // 不对特殊字符进行转换,避免出现重命名字段时的“双下划线”
                        public String encodeNode(String name) {
                            return name;
                        }
    
                        // 对所有xml节点的转换都增加CDATA标记
                        protected void writeText(QuickWriter writer, String text) {
                            writer.write("<![CDATA[");
                            writer.write(text);
                            writer.write("]]>");
                        }
                    };
                }
            });
            // 忽视XML与JAVABEAN转换时,XML中的字段在JAVABEAN中不存在的部分
            xstream.ignoreUnknownElements();
            return xstream;
        }
    
        /**
         * 以压缩的方式输出XML
         *
         * @param obj
         * @return
         */
        public static String toCompressXml(Object obj) {
            XStream xstream = getXStream();
            StringWriter sw = new StringWriter();
            // 识别obj类中的注解
            xstream.processAnnotations(obj.getClass());
            // 设置JavaBean的类别名
            xstream.aliasType("xml", obj.getClass());
            xstream.marshal(obj, new CompactWriter(sw));
            return sw.toString();
        }
    
        /**
         * 以格式化的方式输出XML
         *
         * @param obj
         * @return
         */
        public static String toXml(Object obj) {
            XStream xstream = getXStream();
            // 识别obj类中的注解
            xstream.processAnnotations(obj.getClass());
            // 设置JavaBean的类别名
            xstream.aliasType("xml", obj.getClass());
            return xstream.toXML(obj);
        }
    
        /**
         * 转换成JavaBean
         *
         * @param xmlStr
         * @param cls
         * @return
         */
        @SuppressWarnings("unchecked")
        public static <T> T toBean(String xmlStr, Class<T> cls) {
            XStream xstream = getXStream();
            // 识别cls类中的注解
            xstream.processAnnotations(cls);
            // 设置JavaBean的类别名
            xstream.aliasType("xml", cls);
            T t = (T) xstream.fromXML(xmlStr);
            return t;
        }
    
        /**
         * 以格式化的方式输出XML
         *
         * @param obj
         * @return
         */
        public static String toXmlWithCData(Object obj) {
            XStream xstream = getXStreamWithCData();
            // 识别obj类中的注解
            xstream.processAnnotations(obj.getClass());
            // 设置JavaBean的类别名
            xstream.aliasType("xml", obj.getClass());
            return xstream.toXML(obj);
        }
    
        /**
         * 转换成JavaBean
         *
         * @param xmlStr
         * @param cls
         * @return
         */
        @SuppressWarnings("unchecked")
        public static <T> T toBeanWithCData(String xmlStr, Class<T> cls) {
            XStream xstream = getXStreamWithCData();
            // 识别cls类中的注解
            xstream.processAnnotations(cls);
            // 设置JavaBean的类别名
            xstream.alias("xml", cls);
            T t = (T) xstream.fromXML(xmlStr);
            return t;
        }
    }
    
    
  • 相关阅读:
    ionic3-ng4学习见闻--(aot方式打包问题解决方案)
    ionic3-ng4学习见闻--(轮播图完美方案)
    ionic3-ng4学习见闻--(多语言方案)
    死也要上npm 而不是cnpm苟且偷生
    2017埙箫简谱清单分享(附音频Demo)
    《好久不见》(Cover 陈奕迅)箫声远 洞箫
    React-onsenui之RouterNavigator组件解读
    基于3ds Max的游戏建模方案
    重拾SQL——从无到有
    重拾SQL——表中索值
  • 原文地址:https://www.cnblogs.com/lalalagq/p/10219407.html
Copyright © 2011-2022 走看看