IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java -> Json -> xml 格式之间转换 -> 正文阅读

[Java知识库]Java -> Json -> xml 格式之间转换

Java -> Json -> xml 格式之间转换

需求
获取xml报文  读取xml数据转换json  推送json数据给第三方
生成对应xml报文 ftp提交服务器

json-lib和fastjson在实现时都出现了意外情况后放弃
json转xml时不识别对应标签   单个数组标签会丢失数组变成对象
对接海关xml报文需求时 标签顺序乱了
转换不了命名空间属性和普通标签属性
记录dom4j  gson实现记录
记录参数配置
普通参数 例: head 、body
属性参数和命令空间参数: -xmlns    
根元素: sourceData 

实现 xml中标签属性的插入 和命令空间属性的插入
webservice例子如下

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://WebXml.com.cn/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:getSupportCity xmlns:web="http://WebXml.com.cn/">
         <!--Optional:-->
         <web:byProvinceName xmlns:web="http://WebXml.com.cn/">广东</web:byProvinceName>
      </web:getSupportCity>
   </soapenv:Body>
</soapenv:Envelope>

普通xml报文如下

<Data xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://WebXml.com.cn/">
   <Header/>
   <Body>
      <Student type="get">
         <name>mw</name>
      </Student>
   </Body>
</Data>
public static String jsonToXml(Object json, String rootKey) {
    Document document = DocumentHelper.createDocument();
    //设置根节点和命名空间
    QName qName = new QName(rootKey);
    //设置命令空间
    Element element = document.addElement(qName);
    document.setRootElement(element);

    ObjectMapper objectMapper = new ObjectMapper();
    try {
        JsonObject jsonObject = new JsonParser().parse(objectMapper.writeValueAsString(json)).getAsJsonObject();
        toXml(jsonObject, document.getRootElement(), null);
        return document.asXML();
    } catch (Exception e) {
        log.error(e.getMessage());
        throw new AppException(e.getMessage());
    }
}

private static Element toXml(JsonElement jsonElement, Element parentElement, String name) {
    if (jsonElement instanceof JsonArray) {
        //是json数据,需继续解析
        JsonArray sonJsonArray = (JsonArray)jsonElement;
        for (int i = 0; i < sonJsonArray.size(); i++) {
            JsonElement arrayElement = sonJsonArray.get(i);
            toXml(arrayElement, parentElement, name);
        }
    }else if (jsonElement instanceof JsonObject) {
        //说明是一个json对象字符串,需要继续解析
        JsonObject sonJsonObject = (JsonObject) jsonElement;
        Element currentElement = null;
        if (name != null) {
            currentElement = parentElement.addElement(name);
        }
        Set<Map.Entry<String, JsonElement>> set = sonJsonObject.entrySet();
        for (Map.Entry<String, JsonElement> s : set) {
            toXml(s.getValue(), currentElement != null ? currentElement : parentElement, s.getKey());
        }
    }else if (jsonElement.isJsonNull()){
        parentElement.addElement(name);
    }else {
        //说明是一个键值对的key,可以作为节点插入了
        addAttribute(parentElement, name, jsonElement.getAsString());
    }
    return parentElement;
}

private static void addAttribute(Element element, String name, String value) {
    //增加子节点,并为子节点赋值
    if (String.valueOf(name.charAt(0)).equals(StringPool.DASH)){

        // 参数前为 “-”符号的为节点属性 去除“-”符号并添加属性
        String key=name.substring(1);
        if (key.equals("xmlns")){
            Namespace namespace=new Namespace("",value);
            QName qName=new QName(element.getName(),namespace);
            element.setQName(qName);
        }else {
            element.addAttribute(key,value);
        }
    }else {
        Element el = element.addElement(name);
        el.addText(value);
    }
}

额外记录
mybatisplus StringPool常用符号常量

String AMPERSAND = "&";
    String AND = "and";
    String AT = "@";
    String ASTERISK = "*";
    String STAR = "*";
    String BACK_SLASH = "\\";
    String COLON = ":";
    String COMMA = ",";
    String DASH = "-";
    String DOLLAR = "$";
    String DOT = ".";
    String DOTDOT = "..";
    String DOT_CLASS = ".class";
    String DOT_JAVA = ".java";
    String DOT_XML = ".xml";
    String EMPTY = "";
    String EQUALS = "=";
    String FALSE = "false";
    String SLASH = "/";
    String HASH = "#";
    String HAT = "^";
    String LEFT_BRACE = "{";
    String LEFT_BRACKET = "(";
    String LEFT_CHEV = "<";
    String DOT_NEWLINE = ",\n";
    String NEWLINE = "\n";
    String N = "n";
    String NO = "no";
    String NULL = "null";
    String OFF = "off";
    String ON = "on";
    String PERCENT = "%";
    String PIPE = "|";
    String PLUS = "+";
    String QUESTION_MARK = "?";
    String EXCLAMATION_MARK = "!";
    String QUOTE = "\"";
    String RETURN = "\r";
    String TAB = "\t";
    String RIGHT_BRACE = "}";
    String RIGHT_BRACKET = ")";
    String RIGHT_CHEV = ">";
    String SEMICOLON = ";";
    String SINGLE_QUOTE = "'";
    String BACKTICK = "`";
    String SPACE = " ";
    String TILDA = "~";
    String LEFT_SQ_BRACKET = "[";
    String RIGHT_SQ_BRACKET = "]";
    String TRUE = "true";
    String UNDERSCORE = "_";
    String UTF_8 = "UTF-8";
    String US_ASCII = "US-ASCII";
    String ISO_8859_1 = "ISO-8859-1";
    String Y = "y";
    String YES = "yes";
    String ONE = "1";
    String ZERO = "0";
    String DOLLAR_LEFT_BRACE = "${";
    String HASH_LEFT_BRACE = "#{";
    String CRLF = "\r\n";
    String HTML_NBSP = "&nbsp;";
    String HTML_AMP = "&amp";
    String HTML_QUOTE = "&quot;";
    String HTML_LT = "&lt;";
    String HTML_GT = "&gt;";
    String[] EMPTY_ARRAY = new String[0];
    byte[] BYTES_NEW_LINE = "\n".getBytes();
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:39:48  更:2022-04-28 11:43:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:38:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码