⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlfriendlymapper.java

📁 xstream是一个把java object序列化成xml文件的开源库,轻便好用
💻 JAVA
字号:
package com.thoughtworks.xstream.mapper;import com.thoughtworks.xstream.alias.ClassMapper;/** * Mapper that ensures that all names in the serialization stream are XML friendly. * * <b>$</b> (dollar) chars appearing in class names are replaced with <b>_</b> (underscore) chars.<br> * <b>$</b> (dollar) chars appearing in field names are replaced with <b>_DOLLAR_</b> string.<br> * <b>_</b> (underscore) chars appearing in field names are replaced with <b>__</b> (double underscore) string.<br> * * @author Joe Walnes */public class XmlFriendlyMapper extends MapperWrapper {    public XmlFriendlyMapper(ClassMapper wrapped) {        super(wrapped);    }    public String serializedClass(Class type) {        String name = super.serializedClass(type);        // the $ used in inner class names is illegal as an xml element getNodeName        name = name.replace('$', '-');        // special case for classes named $Blah with no package; <-Blah> is illegal XML        if (name.charAt(0) == '-') {            name = "default" + name;        }        return name;    }    public Class realClass(String elementName) {        // special case for classes named $Blah with no package; <-Blah> is illegal XML        if (elementName.startsWith("default-")) {            elementName = elementName.substring(7);        }        // the $ used in inner class names is illegal as an xml element getNodeName        elementName = elementName.replace('-', '$');        return super.realClass(elementName);    }    public String serializedMember(Class type, String memberName) {        return escape(super.serializedMember(type, memberName));    }    public String realMember(Class type, String serialized) {        return unescape(super.realMember(type, serialized));    }    public String mapNameToXML(String javaName) {        return escape(javaName);    }    public String mapNameFromXML(String xmlName) {        return unescape(xmlName);    }    private String unescape(String xmlName) {        StringBuffer result = new StringBuffer();        int length = xmlName.length();        for(int i = 0; i < length; i++) {            char c = xmlName.charAt(i);            if (c == '_') {                if (xmlName.charAt(i + 1)  == '_') {                    i++;                    result.append('_');                } else if (xmlName.length() >= i + 8 && xmlName.substring(i + 1, i + 8).equals("DOLLAR_")) {                    i += 7;                    result.append('$');                }            } else {                result.append(c);            }        }        return result.toString();    }    private String escape(String javaName) {        StringBuffer result = new StringBuffer();        int length = javaName.length();        for(int i = 0; i < length; i++) {            char c = javaName.charAt(i);            if (c == '$') {                result.append("_DOLLAR_");            } else if (c == '_') {                result.append("__");            } else {                result.append(c);            }        }        return result.toString();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -