精华内容
下载资源
问答
  • } } 3、测试用的xml报文数据 这里不做换行处理了 BX202007141625490000041132JW56FVBIABX0000success:1 fail:0NAITO/SHIMPEI7814803739892MU9331successTEST4 4、测试代码及测试结果 XmlTools xmlTools = new Xml...

    1、所需jar包

    在这里插入图片描述

    2、工具类具体代码

    package test;
    
    import java.util.List;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    /**
     * xml工具类
     * @author sleep
     * @date 2016-09-13
     */
    public class XmlTools {
    
        /**
         * String 转 org.dom4j.Document
         * @param xml
         * @return
         * @throws DocumentException
         */
        public static Document strToDocument(String xml) throws DocumentException {
            return DocumentHelper.parseText(xml);
        }
    
        /**
         * org.dom4j.Document 转  com.alibaba.fastjson.JSONObject
         * @param xml
         * @return
         * @throws DocumentException
         */
        public static JSONObject documentToJSONObject(String xml) throws DocumentException {
            return elementToJSONObject(strToDocument(xml).getRootElement());
        }
    
        /**
         * org.dom4j.Element 转  com.alibaba.fastjson.JSONObject
         * @param node
         * @return
         */
        public static JSONObject elementToJSONObject(Element node) {
            JSONObject result = new JSONObject();
            // 当前节点的名称、文本内容和属性
            List<Attribute> listAttr = node.attributes();// 当前节点的所有属性的list
            for (Attribute attr : listAttr) {// 遍历当前节点的所有属性
                result.put(attr.getName(), attr.getValue());
            }
            // 递归遍历当前节点所有的子节点
            List<Element> listElement = node.elements();// 所有一级子节点的list
            if (!listElement.isEmpty()) {
                for (Element e : listElement) {// 遍历所有一级子节点
                    if (e.attributes().isEmpty() && e.elements().isEmpty()) // 判断一级节点是否有属性和子节点
                        result.put(e.getName(), e.getTextTrim());// 沒有则将当前节点作为上级节点的属性对待
                    else {
                        if (!result.containsKey(e.getName())) // 判断父节点是否存在该一级节点名称的属性
                            result.put(e.getName(), new JSONArray());// 没有则创建
                        ((JSONArray) result.get(e.getName())).add(elementToJSONObject(e));// 将该一级节点放入该节点名称的属性对应的值中
                    }
                }
            }
            return result;
        }
    }
    
    

    3、测试用的xml报文数据 这里不做换行处理了

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><CONTENT><ORDER_ID>BX202007141625490000041132</ORDER_ID><PNR_CODE>JW56FV</PNR_CODE><RETCODE>BIABX0000</RETCODE><RETMEMO>success:1	fail:0</RETMEMO><RETURNINFOS><RETURNINFO><INSURNAME>NAITO/SHIMPEI</INSURNAME><TICKETNO>7814803739892</TICKETNO><FLIGHTNO>MU9331</FLIGHTNO><FLAG>success</FLAG><DETAILMEMO>TEST4</DETAILMEMO></RETURNINFO></RETURNINFOS></CONTENT>
    

    4、测试代码及测试结果

    		XmlTools xmlTools = new XmlTools();
    		JSONObject jsonObject = null;
    		try {
    			jsonObject = xmlTools.documentToJSONObject(这里放xml);
    		} catch (DocumentException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    

    在这里插入图片描述

    5、遇到困难可以评论(有信必回)小轩微信号tangchenxuan1999

    展开全文
  •  2.LR存放报文格式问题:  XML头部必须使用转义符\ 。如示例中的<?xml version=\"1.0\" encoding=\"UTF-8\"?>   报文 " "之间存在空格。 如" "之间存在空格应用程序可能无法正确解析报文,这里需要注意...

    以下是测试脚本Demo:

    #include "lrs.h"
    
    Action()
    {
        char * resultCode;//结果代码
        char * time;  //系统时间
         char * errorInfo;
        int rc; 
    
        lr_start_transaction("事物");
        
        //设置socket连接超时时间
         lrs_set_connect_timeout(60, 0);
    
        rc=lrs_create_socket("socket", "TCP", "LocalHost=0", "RemoteHost=IP:port",  LrsLastArg);
    
        //lr_output_message("rc=%d",rc);
    
        if(rc != 0){
             lrs_close_socket("socket");
             lr_end_transaction("事物", LR_FAIL);
             lr_error_message("创建socket失败!");
             
            return 0;    
    
        }
        //发送请求buf
        lrs_send("socket", "buf2", LrsLastArg);
        
        //设置socket接受内容的超时时间,如果请求处理时间超出LR默认的120秒,将无法接收到响应内容,因此我们可以根据实际需要设置可接受的超时时间来获取响应信息。
        lrs_set_recv_timeout(300, 0);
        //接收响应buf
        lrs_receive("socket", "buf3", LrsLastArg);
        //从接收到的响应buf中截取指定字段长度,用以断言请求是否处理成功
        lrs_save_searched_string("socket",NULL,"Result","LB/BIN=<retCd>",NULL,1,0,6);
        //lrs_save_searched_string("socket",NULL,"ErrorInfo","LB/BIN=<desc>","RB/BIN=</desc>",1,0,-1);  
        //关闭socket连接
        lrs_close_socket("socket");
        
        resultCode = lr_eval_string("{Result}");
        //errorInfo =lr_eval_string("{ErrorInfo}");
    
        //lr_output_message("结果代码 = %s",resultCode);   
    
        if(strcmp(resultCode,"000000") == 0){
            lr_end_transaction("事物", LR_PASS);
    
        }else{
            lr_end_transaction("事物", LR_FAIL);
            
            //lr_error_message("retCd:%s ,desc:%s",resultCode,errorInfo);
            //lr_save_datetime("%Y_%m_%d %H:%M:%S", DATE_NOW + TIME_NOW, "time");
            //lr_error_message("时间 = %s",lr_eval_string("<time>"));
        }
        
       // lr_end_transaction("事物",LR_AUTO);
    
        return 0;
    }

    data.ws部分:

    ;WSRData 2 1     //固定格式
    
    send  buf2 724   //发送buf长度
    //报文样例 "00000724<?xml version=\"1.0\" encoding=\"UTF-8\"?>" "<transaction>" "<header>" "<ver>1.0</ver>" "<msg>" "<callTyp>1231</callTyp>" "</msg>" "</header>" "<body>" "<request>" "<ReqBaseHdr>" "<ChnlCD>er</ChnlCD>" "</request>" "</body>" "</transaction>" recv buf3 17311 //接收响应buf长度 -1 //固定格式

     data.ws部分主要介绍两点:

     1. 如何计算报文长度?

         如下所示,报文长度是8位数,当我们不知道报文精确长度时,可以给一个预估大小,然后把脚本的扩展日志3个选项都勾选上,然后执行脚本,

         查看LR控制台日志,如下图所示:

              

         从日志打印sent buffer 可以看出,报文长度我指定的是724个字节,日志提示将发送732字节到socket,也就是说724(实际报文长度)=732 - 8(8位报文长度),

         已实验多次很准, 同样的接收报文的长度计算也是如此。需要注意的是,如果你send的报文应用程序解析失败或抛异常,很可能是你报文长度计算有误导致。

         如果依然不确定长度,也可以借助UE编辑工具查看报文所占字节数,如下图所示,在UE右下角查看文件大小。或者通过查看应用日志排查是否报文发送正常。

          

        

     2.LR存放报文的格式问题:

         XML头部必须使用转义符\ 。如示例中的<?xml version=\"1.0\" encoding=\"UTF-8\"?>   

         报文 " "之间存在空格。如"<transaction>     "之间存在空格应用程序可能无法正确解析报文,这里需要注意。       

    转载于:https://www.cnblogs.com/ssj0723/p/9630639.html

    展开全文
  • xml version="1.0" encoding="GBK"?> <Esb><MsgHead><msgSender>BBPF</msgSender><msgReceiver>RESSYS</msgReceiver></MsgHead></Esb> 把上面的变成一行 ...
  • 开发者端:发送请求,并接收结果 &lt;?... // 下面的demo,实现的功能如下: ...// 3-第三方接口获取开发者的xml数据,通过数据的查询,把结果再以xml格式发送给开发者。 //首先检测是否...

    开发者端:发送请求,并接收结果

    复制代码
    <?php
    
    //  下面的demo,实现的功能如下:
    //   1-开发者需要判断一个用户是否存在,去请求第三方接口。
    //   2-与第三方接口的通信,是以xml格式传送数据。开发者把用户信息以xml格式发送给第三方接口
    //   3-第三方接口获取开发者的xml数据,通过数据的查询,把结果再以xml的格式发送给开发者。
    
    
    //首先检测是否支持curl
    if (!extension_loaded("curl")) {
        trigger_error("对不起,请开启curl功能模块!", E_USER_ERROR);
    }
    
    //构造xml
    $xmldata="<?xml version='1.0' encoding='UTF-8'?><group><name>张三</name><age>22</age></group>";
    
    //初始一个curl会话
    $curl = curl_init();
    
    //设置url
    curl_setopt($curl, CURLOPT_URL,"http://localhost/demo/dealxml.php");
    
    //设置发送方式:post
    curl_setopt($curl, CURLOPT_POST, true);
    
    //设置发送数据
    curl_setopt($curl, CURLOPT_POSTFIELDS, $xmldata);
    
    //TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    
    //执行cURL会话 ( 返回的数据为xml )
    $return_xml = curl_exec($curl);
    
    //关闭cURL资源,并且释放系统资源
    curl_close($curl);
    
    //echo $return_xml;
    //exit;
    
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    //先把xml转换为simplexml对象,再把simplexml对象转换成 json,再将 json 转换成数组。
    $value_array = json_decode(json_encode(simplexml_load_string($return_xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    
    echo "<pre>";
    print_r($value_array);
    ?>
    复制代码

     

    第三方接口端:接收请求,并返回处理结果

    复制代码
    <?php
    
    //接收传送的数据
    $fileContent = file_get_contents("php://input"); 
    
    
    ### 把xml转换为数组
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    //先把xml转换为simplexml对象,再把simplexml对象转换成 json,再将 json 转换成数组。
    $value_array = json_decode(json_encode(simplexml_load_string($fileContent, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    
    
    ### 获取值,进行业务处理
    $name = $value_array['name'];
    $age = $value_array['age'];
    // 通过查询,判断该用户是否存在
    
    
    ### 把查询结果添加到数组中
    $value_array['result'] = 1;
    
    
    ### 把数组转换为xml格式,返回
    $xml = "<?xml version='1.0' encoding='UTF-8'?><group>";
    foreach ($value_array as $key=>$val)
    {
        if (is_numeric($val)){
            $xml.="<".$key.">".$val."</".$key.">";
        }else{
            $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
        }
    }
    $xml.="</group>";
    
    
    
    
    
    // echo $xml;
    return $xml; ?>




    ///

    postxml.php

     
    1. 1

      <?php

      //首先检测是否支持curl

      if (!extension_loaded("curl")) {   

      trigger_error("对不起,请开启curl功能模块!", E_USER_ERROR);

      }

       

      //构造xml

      $xmldata="<?xml version='1.0' encoding='UTF-8'?><group><name>张三</name><age>22</age></group>";

       

       

      //初始一个curl会话

      $curl = curl_init();

       

       

      //设置url

      curl_setopt($curl, CURLOPT_URL,"http://localhost/dealxml.php");

       

       

      //设置发送方式:

      postcurl_setopt($curl, CURLOPT_POST, true);

       

       

      //设置发送数据

      curl_setopt($curl, CURLOPT_POSTFIELDS, $xmldata);

       

       

      //抓取URL并把它传递给浏览器

      curl_exec($curl);

       

       

      //关闭cURL资源,并且释放系统资源

      curl_close($curl);

      ?>

      php用post发送xml数据,获取XML,并解析xml步骤
      END

    dealxml.php

     
    1. 1

      ‍<?php

      //接收传送的数据

      $fileContent = file_get_contents("php://input");

       

      //转换为simplexml对象

      $xmlResult = simplexml_load_string($fileContent);

       

      //foreach循环遍历

      foreach($xmlResult->children() as $childItem) {  

       //输出xml节点名称和值    

       

      echo $childItem->getName() . "->".$childItem."<br />";   

       //其他操作省略

      }

      ?>

      php用post发送xml数据,获取XML,并解析xml步骤
    2. 2

      //运行结果为:

      name->张三age->22

      php用post发送xml数据,获取XML,并解析xml步骤
    3. 3

      演示代码下载地址:

      百度网盘:http://pan.baidu.com/s/1o63F5qy

      /

      特地的写了一个程序测试下file_get_contents这个函数,汗,才发现原来它抓的是网页的源代码,不是网页的内容,以前一直以为抓的是内容。
       
              那么就可以说明一个问题了,它抓的是源代码,如果是HTML,那么echo之后就直接在浏览器里面输出了网页的容,但是由于现在抓的是XML的源代码,那么var_dump的话其实是不能输出XML的。因为浏览器不认识这个。
       
             那么怎么办呢?好办,先用file_get_contents远程抓取XML,再把抓取的结果用simplexml_load_string()处理就OK 啦。simplexml_load_string()读取的是XML,返回的是一个对象。那么下一个问题来了,如何获取对象里面的值呢?
    展开全文
  • 格式Xml报文

    2013-04-06 23:05:07
    Xml报文格式化简单思路。1、定义xml报文配置文件中各个标签的对应处理类。2、定义xml报文配置文件。3、通过ElementFactory获取xml配置文件对应的Element对象。4、使用Element对象格式化xml报文。    ...

    Xml报文格式化简单思路。
    1、定义xml报文配置文件中各个标签的对应处理类。
    2、定义xml报文配置文件。
    3、通过ElementFactory获取xml配置文件对应的Element对象。
    4、使用Element对象格式化xml报文。


     
     




     

    展开全文
  • 目前接触到的报文格式有三种:xml 、定长报文、变长报文 。此处只做简单介绍,日后应该会深入学习到三者之间如何解析,再继续更新。——2016.9.23XMLXML 被设计用来传输和存储数据。HTML 被设计用来显示数据。XML ...
  • c解析xml报文最精简的

    2011-07-19 11:35:10
    c解析xml报文最精简的 c解析xml报文格式
  • 依据XML定义报文格式解析数据

    千次阅读 2017-07-20 09:25:30
    1、将报文格式定义在xml中 2、通过格式xml来解析数据 当前体会到此设计的优势: (1)报文格式可在xml中配置。报文格式调整不涉及程序调整。 (2)程序可读性强。实现: 一、自定义xml文件 二、读取XML...
  • 接口XML报文

    2019-01-05 13:47:08
    接口XML报文,已优化为最优格式,可学习xml报文是如何进行编辑的
  • XML报文格式<?xml version="1.0" encoding="utf-8"?> 报文头:<?xml version="1.0" encoding="utf-8"?> <?xml ?>:报文头格式,报文头内容放在xml和?符号中间 version="1.0":声明使用的xml...
  • java之xml报文传值问题的解决~~~ xml格式报文请求后端 1.这里本人使用postman来请求java后端,在postman中的设置 <TradeData> <BaseInfo> <RequestDate>2017-07-06 15:47:30</RequestDate&...
  • 解析xml报文

    2021-03-09 08:43:27
    解析xml报文 //解析xml报文 StringReader read = new StringReader(dealData); //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入 InputSource source = new InputSource(read); //创建...
  • 页面JS格式xml报文

    千次阅读 2019-01-23 14:45:52
    废话不多说直接上页面: &lt;!doctype html&gt; &lt;html&gt; &lt;...Xml网页格式化展示&lt;/title&gt; &lt;script type="text/javascript" src="
  • dom4j生成XML报文以及CDATA值的设置

    千次阅读 2016-09-23 17:07:45
    接口通讯报文经常遇到需要使用XML报文的情况,这几天刚好与另一个系统做接口开发,对方要求的XML报文格式如下: 2014 2 0001 100000 CORPMIS TMIS 2014-02-27 11:44:33 ...
  • XML编码模型类(一): package com.XML.test; import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class XMLEncodeModel { private Map...
  • xml报文转json小工具

    2018-09-27 15:28:24
    xml报文转json小工具
  • C# 发送xml报文到用友U8生成凭证系列四(Biz代码)最终代码上文我们详细讲解了u8voucher.xml、Web.config、U8EAI.asmx、EAIHandler.cs 等代码及xml报文格式及相关confi...
  • XML报文格式 SOP报文格式 LTTS报文 LTTS2报文 SERIAL报文 ISO8583报文格式 CNPAS1报文 CNPAS2报文   常见的通讯方式如下: TCP通讯 TUXEDO通讯 HTTP通讯 WEB SERVICE通讯 JMS通讯 MQ通讯...
  • 目前接触到的报文格式有三种:xml 、定长报文、变长报文 。 此处只做简单介绍,日后应该会深入学习到三者之间如何解析,再继续更新。——2016.9.23 XML XML 被设计用来传输和存储数据。 HTML 被设计用来显示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,730
精华内容 10,292
关键字:

xml报文格式