方法/步骤-StringBuffer

  1. 1
    说到拼接我们第一反应往往是想到StringBuffer str = new StringBuffer();
    然后是一长串的append;对,没错 我也是!这种方式虽然看起来代码很整洁,但是不建议用,如果xml报文一旦特别长的话,在你的代码里一眼望去都是append看着好心累~

    java 封装xml报文 java生成xml报文_贴图

    END

方法/步骤2-Document

  1. 1
    第二种方法就稍稍玩得高端一点,哥哥们先别着急,需要引一个dom4j的jar,先贴图。

    java 封装xml报文 java生成xml报文_子节点_02

  2. 2
    有jar包就好办了,接下来是具体的使用方法,图给你们代码也贴给你们,都是实际项目中用到的,没什么好吝啬!
              /*拼接xml报文*/
             Document document1;
             //这是在创建一个根节点
             Element root = DocumentHelper.createElement("data");  
            //把根节点变成一个Document 对象方便添加子节点
            document1 = DocumentHelper.createDocument(root);
            Element head = root.addElement("head");
            Element log_id = head.addElement("log_id");//接口调用轨迹id
           //setText里面的值是子节点<log_id>的值
            log_id.setText(UUID.randomUUID().toString());
            Element wsid = head.addElement("wsid");//接口id
            wsid.setText("SLIS_NB_20150417_01");
            Element sendtime = head.addElement("sendtime");//发送时间
            sendtime.setText(PubFun.getCurrentYMDHMSS());
            Element body = root.addElement("body");
            Element agentcode = body.addElement("prtno");
            agentcode.setText(prtno);
            Element appntname = body.addElement("type");
            appntname.setText(type);
            Element paycount = body.addElement("salechnlflag");
            paycount.setText(salechnlflag);
            String requestXml = document1.asXML();
     
    requestXml打印出来就是如第二张图的样子了,我为了让大家看得清楚一点就拿出来格式化了一下,data是根节点,然后就是<head>和<body>两个子节点,一目了然。这种方式也是比较常见的一种,引用dom4j,相信大多数的项目里都用到这个包!

    java 封装xml报文 java生成xml报文_贴图_03

    java 封装xml报文 java生成xml报文_java 封装xml报文_04

    END

方法/步骤3-XStream

  1. 之前我也写过一篇解析xml报文的小篇,其中也是用的XStream;拼接xml这块同样适合!先引jar包xstream-1.4.4版本

    java 封装xml报文 java生成xml报文_子节点_05

  2. 然后根据我的xml报文格式建立相应的实体类;根节点是data,然后下面是两个子节点 head和body,注意得实现他们的get set方法哈!

    java 封装xml报文 java生成xml报文_贴图_06

    java 封装xml报文 java生成xml报文_贴图_07

  3. 然后是head节点下面又包含了一些节点,同样的我们也得建一个head的实体类,类里的字段都是对应head下面的子节点,实现get set方法!

    java 封装xml报文 java生成xml报文_xml_08

  4. 然后是body节点下面又包含了一些节点,贴图了!

    java 封装xml报文 java生成xml报文_xml_09

  5. 实体类都对应上了我们要拼接的xml报文节点之后然后就是组装起来了!贴图贴代码大家看看吧。
    // 生成请求xml报文
    Head head = new Head();
    head.setWsid("SLIS_NB_20150417_06"); // 接口id
    head.setLog_id(UUID.randomUUID().toString()); // log的id,uuid
    head.setSendtime(PubFun.getCurrentYMDHMSS()); // 接口调用时间,格式为yyyymmddhhmissfff,精确要毫秒
    Body body = new Body();
    body.setAgentcode(agentcode);
    body.setAgenttype(agenttype);
    Data data = new Data();
    data.setHead(head);
    data.setBody(body); 
    XStream xstream = new XStream();
    xstream.alias("data", Data.class);
    xstream.alias("head", Head.class);  
    xstream.alias("body", Body.class);  
    String requestXml = data.headInfo + xstream.toXML(data);
     
    这种方式比较正规也是比较好的一种方法,把所有的入参都映射对象,强力推荐!!!

    java 封装xml报文 java生成xml报文_xml_10