java后台怎么接收并解析传入的xml数据

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Request>
<Head>
<TxCode>2818</TxCode>
</Head>
<Body>
<PaymentNo>U0000022019061750506390001</PaymentNo>
<Status>20</Status>
<Amount>400</Amount>
</Body>
</Request>

如上,有一段xml数据。要从前端传给后台。接收方式有两种,一种是Http形式,另一种是xml以字符串的形式传进后台。但不管怎么传,最重要的还是传进后台以后怎么去处理xml,怎么得到这里面我们想要的元素信息。这里就涉及到dom4j的使用。json有fastjson来解析,xml自然也有可以解析它的东西。

今天就写一下以Http接收的示例,如果是以String接收那就更简单了,大同小异,我就不写了。

先上代码解析:

public String payment(HttpServletRequest request) throws DocumentException, IOException {
        // 获取HTTP请求的输入流
        // 已HTTP请求输入流建立一个BufferedReader对象
        BufferedReader br = new BufferedReader(new InputStreamReader(
                request.getInputStream(), "UTF-8"));
        String buffer = null;
        // 存放请求内容
        StringBuffer xml = new StringBuffer();
        while ((buffer = br.readLine()) != null) {
            // 在页面中显示读取到的请求参数
            xml.append(buffer);
        }

        String callbackMessage = xml.toString();
        if (!ObjectUtils.isEmpty(callbackMessage)) {
            Payment payment= new Payment();
            Document doc = null;
            //1.读取并解析XML文档,SAXReader就是一个管道,用一个流的方式,把xml文件读出来
            // SAXReader reader = new SAXReader();
            // Document document = reader.read(new File("User.hbm.xml")); //User.hbm.xml表示你要解析的xml文档
            //2.将字符串转为XML
            doc = DocumentHelper.parseText(callbackMessage);
            Element rootElt = doc.getRootElement(); // 获取根节点Request
            System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
            Iterator iter = rootElt.elementIterator("Head"); // 获取根节点下的子节点head
            // 遍历head节点
            while (iter.hasNext()) {
                Element recordEless = (Element) iter.next();
       
                String txCode = recordEless.elementTextTrim("TxCode");
                payment.setTxCode(txCode);
                System.out.println("txCode:" + txCode);

            }
            Iterator iterss = rootElt.elementIterator("Body"); ///获取根节点下的子节点body
            // 遍历body节点
            while (iterss.hasNext()) {
                Element recordEless = (Element) iterss.next();
               
                String paymentNo = recordEless.elementTextTrim("PaymentNo");
                payment.setPaymentNo(paymentNo);
                System.out.println("paymentNo:" + paymentNo);
               
                String status = recordEless.elementTextTrim("status");
                payment.setStatus(status);
                System.out.println("status:" + status);
                
                String amount = recordEless.elementTextTrim("Amount");
                payment.setAmount(amount);
                System.out.println("amount:" + amount);
                
               
            }


            ......到此xml解析完毕,后续操作省略
           
        }

用到的包

代码拷进去编辑器应该会有提醒的。

  • 18
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值