20170401 错了两天的-XML解析
你不找到的话,错误就在那里。你找到了错误才会成为财富!
Strans XML 解析3要素:
1.源xml 格式正常,
eg.
'<?xml version="1.0" encoding="UTF-8"?>' '<handleIMatnrResourceServiceResponse><out>'
'<MLMatnrResource>
<backup1/>
<backup2/>
<backup3/>
<backup4/>
<backup5/>
<ebeln>4800064316</ebeln>
<ebelp>00010</ebelp>
<lifnrAmount/>
<maktx>A级冰箱型号标贴_C0414.6-1(A</maktx>'
'<matnr>000000000800013563</matnr>
<proAmount/>
<storeAmount>12.0</storeAmount> </MLMatnrResource>'
'</out></handleIMatnrResourceServiceResponse>'
2.XML 解析例程可用,
判断方法:
a.code pass,
b.节点正确,
3.检查表结构对应是否OK,
用这个 以图 片方式编辑简单转换 ---正确和错误的对比没差别,这个方式作用不大!
Debug 进去比对源结构和程序结构是否对应,可以检查结构问题
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates"> <tt:root name="MLMatnrResource"/>
<tt:template>
<handleIMatnrResourceServiceResponse>
<out>
<tt:loop name="out" ref=".MLMatnrResource">
<MLMatnrResource> <backup1>
<tt:value ref="$ref.backup1"/>
</backup1>
<backup2>
<tt:value ref="$ref.backup2"/>
</backup2>
<backup3>
<tt:value ref="$ref.backup3"/>
</backup3>
<backup4>
<tt:value ref="$ref.backup4"/>
</backup4>
<backup5>
<tt:value ref="$ref.backup5"/>
</backup5> <ebeln>
<tt:value ref="$ref.ebeln"/>
</ebeln>
<ebelp>
<tt:value ref="$ref.ebelp"/>
</ebelp>
<lifnrAmount>
<tt:value ref="$ref.lifnrAmount"/>
</lifnrAmount>
<maktx>
<tt:value ref="$ref.maktx"/>
</maktx>
<matnr>
<tt:value ref="$ref.matnr"/>
</matnr>
<proAmount>
<tt:value ref="$ref.proAmount"/>
</proAmount>
<storeAmount>
<tt:value ref="$ref.storeAmount"/>
</storeAmount>
</MLMatnrResource>
</tt:loop>
</out>
</handleIMatnrResourceServiceResponse>
</tt:template> </tt:transform>
3.RETURN 内表定义要与源数据表 匹配!
实例证明,表结构不对应,解析不了,
CALL TRANSFORMATION ZML_XML_TRANS02"ZML_XML_RESOURCE
SOURCE XML Z_OUT-RETURN_DATA
RESULT MLMATNRRESOURCE = GT_RE.
FUNCTION ZMLSCP1_FR0008.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_EBELN) TYPE EBELN OPTIONAL
*" VALUE(I_MATNR) TYPE MATNR OPTIONAL
*" EXPORTING
*" VALUE(O_STATU) TYPE CHAR1
*" VALUE(O_MSG) TYPE CHAR255
*" TABLES
*" OT_RESOURCE STRUCTURE ZSRM_RESOURCE
*"----------------------------------------------------------------------
*&Flag -手动; -自动
DATA:L_TABIX TYPE SY-TABIX.
DATA:LV_FLAG TYPE C.
DATA:LV_CON TYPE STRING.
DATA: ERROR TYPE REF TO CX_AI_SYSTEM_FAULT.
DATA: PRXY TYPE REF TO ZCO_REQUEST_IMATNR_RESOURCE_SE."Proxy Name
DATA: Z_IN TYPE ZREQUEST8. "request in
DATA: Z_OUT TYPE ZRESPONSE8."request out
DATA: O_CX TYPE REF TO CX_ROOT.
DATA: O_ERROR TYPE REF TO CX_ST_ERROR.
TYPES:BEGIN OF TY_RE,
BACKUP1 TYPE STRING,"备用字段1
BACKUP2 TYPE STRING,"备用字段2
BACKUP3 TYPE STRING,"备用字段3
BACKUP4 TYPE STRING,"备用字段4
BACKUP5 TYPE STRING,"备用字段5
EBELN TYPE STRING,"采购订单号
EBELP TYPE STRING,"采购订单行项目号
LIFNRAMOUNT TYPE MENGE, "供应商库存数量 "结构-MENGE:物料主记录视图: 可选的物料数量
MAKTX TYPE STRING, "物料描述
MATNR TYPE STRING, "物料代码
PROAMOUNT TYPE MENGE, "生产数量
STOREAMOUNT TYPE MENGE, "线边仓库存数量
PRODATE TYPE DATUM, "生产日期
END OF TY_RE.
DATA:GT_RE TYPE STANDARD TABLE OF TY_RE,
WA_RE LIKE LINE OF GT_RE. *&job user
IF SY-UNAME EQ ''.
LV_FLAG = ''.
ELSE.
LV_FLAG = ''.
ENDIF. CONCATENATE '<in0>' LV_FLAG '</in0>' '<in1>' I_EBELN '</in1>' '<in2>' I_MATNR '</in2>' INTO LV_CON. *&s1.call proxy get data via cis
* Z_IN-REQUEST_DATA = '<?xml version="1.0" encoding="UTF-8"?><handleIMatnrResourceService><in0>' && LV_FLAG && '</in0></handleIMatnrResourceService>'.
CONCATENATE '<?xml version="1.0" encoding="UTF-8"?><handleIMatnrResourceService>' LV_CON '</handleIMatnrResourceService>' INTO Z_IN-REQUEST_DATA.
CLEAR ERROR.
TRY.
CREATE OBJECT PRXY
EXPORTING
LOGICAL_PORT_NAME = 'ZMLSCP_GET_RESOURCE'.
CALL METHOD PRXY->REQUEST
EXPORTING
INPUT = Z_IN
IMPORTING
OUTPUT = Z_OUT.
CATCH CX_AI_SYSTEM_FAULT INTO ERROR.
O_STATU = 'E'.
O_MSG = ERROR->ERRORTEXT.
RETURN.
ENDTRY. *&1.1 is it ok?
IF Z_OUT-RETURN_CODE = 'E'.
O_STATU = 'E'.
O_MSG = Z_OUT-RETURN_DESC.
RETURN.
ENDIF. BREAK-POINT.
*&s2.transfer XML
IF Z_OUT-RETURN_DATA IS NOT INITIAL."业务系统返回报文不为空
TRY .
CLEAR:GT_RE,WA_RE.
CALL TRANSFORMATION ZML_XML_TRANS02"ZML_XML_RESOURCE
SOURCE XML Z_OUT-RETURN_DATA
RESULT MLMATNRRESOURCE = GT_RE.
*
IF SY-SUBRC NE .
O_STATU = 'E'.
O_MSG = 'XML解析失败!'.
RETURN.
ENDIF.
BREAK-POINT.
CATCH CX_ST_ERROR INTO O_ERROR .
O_STATU = 'E'.
O_MSG = O_ERROR->GET_TEXT( ) .
ENDTRY.
ELSE.
O_STATU = 'E'.
O_MSG = '返回结果为空!'.
ENDIF. *&s3.data save to ZSRM_RESOURCE
IF GT_RE[] IS NOT INITIAL.
LOOP AT GT_RE INTO WA_RE.
MOVE-CORRESPONDING WA_RE TO OT_RESOURCE.
OT_RESOURCE-ZDATUM = SY-DATUM.
OT_RESOURCE-ZCPUTM = SY-UZEIT.
OT_RESOURCE-USNAM = SY-UNAME.
OT_RESOURCE-ZFLAG = LV_FLAG.
APPEND OT_RESOURCE.
* MODIFY GT_RE FROM WA_RE.
* CLEAR WA_RE.
ENDLOOP.
* TRY
MODIFY ZSRM_RESOURCE FROM TABLE OT_RESOURCE.
IF SY-SUBRC EQ .
COMMIT WORK AND WAIT .
DESCRIBE TABLE OT_RESOURCE LINES L_TABIX.
O_STATU = 'S'.
O_MSG = '成功存入ZSRM_RESOURCE' && L_TABIX && '条记录!'.
ELSE.
ROLLBACK WORK.
O_STATU = 'E'.
O_MSG = '数据存入 ZSRM_RESOURCE表失败!'.
ENDIF. ENDIF. ENDFUNCTION.
20170401 错了两天的-XML解析的更多相关文章
- 两个关于XML解析报错问题小记
Caused by: org.xml.sax.SAXParseException: The string "--" is not permitted within comments ...
- 两种设计模式和XML解析
两种设计模式 1.单例模式 模式的保证步骤:单例(是说在一个类中只能有一个对象)三条件 1.1类构造设置私有 private Play() { } 1.2 定义一个私有的静态的 类类型 变量 ...
- 深入解读XML解析
一.XML是什么?有什么用? XML是指.作为配置文件存在 二.XML的基本语法 1.文档声明:很重要 在编写XML文档时,需要先使用文档声明来声明XML文档.且必须出现在文档的第一行. 作用:告知解 ...
- Json和XML解析
NSXMLParse 关于XML,有两种解析方式,分别是SAX(Simple API for XML,基于事件驱动的解析方式,逐行解析数据,采用协议回调机制)和DOM(Document Object ...
- Duilib源码分析(三)XML解析器—CMarkup
上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- tinyxml一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
- PERL/LEX/YACC技术实现文本解析--XML解析
继周六的p_enum.pl后,再来一篇说说我用perl做的lex,yacc工具.之前说了,我学习lex和yacc的最初动机是为了做个C语言解释器的SHELL:但后来工作中的实际需要也是制作perl版l ...
- iOS-数据解析XML解析的多种平台介绍
在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...
随机推荐
- vue 过滤与全文索引
过滤 与 全文索引 <template> <div> <input type="text" v-model="query"> ...
- 自己动手开发更好用的markdown编辑器-04(实时预览)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/25/hexomd-04/ 程序打包 文章目录 1. 打开新窗口 ...
- TensorFlow学习笔记 速记2 报错:failed call to cuDevicePrimaryCtxRetain: CUDA_ERROR_INVALID_DEVICE
版本: tensorflow-gpu 原因: 在创建session时没有使用我想让它用的gpu 解决方案: 1. 在python程序中: import os os.environ["CUDA ...
- 编译安装git
http://zhaohe162.blog.163.com/blog/static/38216797201472185321661/
- Unity插件之NGUI学习(4)—— 创建UI2DSprite动画
创建一个新的Scene.并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Crea ...
- webdriver下拉框中选择option的方法提醒
select这个标签比较特殊 下面的option不能用点击下拉框,再点击选中这种方法 前端代码: <html> <body> <select id="Shipp ...
- centos6.5下Nginx的安装
此处主要介绍通过配置Nginx的官方yum源,通过yum安装Nginx.参考官网:http://nginx.org/en/linux_packages.html 主要分为以下步骤: 1.配置yum源: ...
- error: not found: value sc
[问题] 解压spark的tar包后,执行bin/spark-shell,执行val lines=sc.textFile("README.md")时,抛错error: not fo ...
- 在linux下使用curl
使用curl从 ftp下载文件 curl ftp://192.168.31.164/lrzsz-0.12.20.tar.gz --user root:123456 -o lrzsz-0.12.20.t ...
- ubuntu16.04.3安装MinDoc
1. 安装mysql apt-get install mysql-serverapt-get install mysql-client 2. 登陆mysql mysql -u root -p输入安装过 ...