浅谈Java拼接xml报文

本文介绍三种拼接XML报文的方法:使用StringBuffer、Document和XStream。详细讲解每种方法的优缺点及具体实现步骤,适用于不同场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法/步骤-StringBuffer

  1. 1

    说到拼接我们第一反应往往是想到StringBuffer str = new StringBuffer();

    然后是一长串的append;对,没错 我也是!这种方式虽然看起来代码很整洁,但是不建议用,如果xml报文一旦特别长的话,在你的代码里一眼望去都是append看着好心累~

    浅谈Java拼接xml报文

    END

方法/步骤2-Document

  1. 1

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

    浅谈Java拼接xml报文

  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报文

    END

方法/步骤3-XStream

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

    浅谈Java拼接xml报文

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

    浅谈Java拼接xml报文

    浅谈Java拼接xml报文

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

    浅谈Java拼接xml报文

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

    浅谈Java拼接xml报文

  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报文步骤阅读

    END

### 使用 Java Map 构建和拼接 XML 报文 为了实现通过 `Map` 来构建并最终形成 XML 文档,在 Java 中可以采用多种方法。一种常见的方式是利用第三方库如 Apache Commons 或者 Jackson 的 Data Binding 功能来简化这一过程;另一种则是基于原生 API 如 StringBuilder 结合 HashMap 完成字符串组装。 下面展示了一个简单的例子,该实例展示了如何使用标准 Java 类库中的工具完成此操作: ```java import java.util.HashMap; import java.util.Map; public class XmlBuilderExample { private static String buildXmlFromMap(Map<String, Object> map) { StringBuilder xml = new StringBuilder(); xml.append("<root>"); for (String key : map.keySet()) { xml.append(String.format("<%s>", key)); Object value = map.get(key); if (value instanceof Map<?, ?>) { @SuppressWarnings("unchecked") Map<String, Object> subMap = (Map<String, Object>) value; xml.append(buildXmlFromMap(subMap)); // 递归调用 } else { xml.append(String.format("%s", escapeXml(value.toString()))); } xml.append(String.format("</%s>", key)); } xml.append("</root>"); return xml.toString(); } private static String escapeXml(String input) { return input.replace("&", "&") .replace("<", "<") .replace(">", ">") .replace("\"", """) .replace("'", "'"); } public static void main(String[] args) { Map<String, Object> personInfo = new HashMap<>(); personInfo.put("id", "001"); personInfo.put("name", "张三"); Map<String, Object> addressDetails = new HashMap<>(); addressDetails.put("city", "北京"); addressDetails.put("street", "天安门广场东侧"); personInfo.put("address", addressDetails); System.out.println(buildXmlFromMap(personInfo)); } } ``` 上述代码片段定义了一个名为 `buildXmlFromMap()` 方法用于接收一个键值对集合作为参数,并返回对应的 XML 字符串表示形式[^1]。此外还提供了一个辅助函数 `escapeXml()`, 对于可能存在的特殊字符进行了转义处理以确保生成合法的 XML 格式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值