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 ...
随机推荐
- Intellj IDEA14.0.2启动异常之3分钟修复
今天是周一,刚到公司启动心爱的IDEA,,突然启动到一半,就抛异常了,直接弹窗,报例如以下的异常: java.lang.RuntimeException: com.intellij.ide.plugi ...
- 论C++STL源代码中关于堆算法的那些事
关于堆,我们肯定熟知的就是它排序的时间复杂度在几个排序算法里面算是比較靠上的O(nlogn)常常会拿来和高速排序和归并排序讨论,并且它还有个长处是它的空间复杂度为O(1), 可是STL中没有给我们提供 ...
- 如何添加、删除、合并PDF文件里的页面?
使用Adobe Acrobat. Adobe中文官网http://www.adobe.com/cn/products/acrobat.html 能够自己下载破解版. watermark/2/text/ ...
- 【Mac + ATX基于uiautomator2】使用weditor时,报错:requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))
产生以下原因找到了:是因为启动了appium,两者冲突,不能同时使用. 之前讲过怎么安装u2([Mac安装,ATX基于uiautomator2]之安装步骤)以及使用weditor, 但是经过一段时间, ...
- 解决pip安装模块报错Cannot fetch index base URL http://pypi.python.org/simple/
产生这个问题的原因呢和github一样,因为他们用的cdn被墙.经小伙伴反馈,解决办法如下. 通过指定国内镜像源来安装: pip --trusted-host 镜像源 install 模块名 -i 镜 ...
- c语言之linux下gettimeofday函数windows替换方案
* Copyright (C) 2008 mymtom (mymtom@hotmail.com) * All rights reserved. * * Redistribution and use i ...
- shell学习五十八天----/proc文件系统
/proc文件系统 前言:linux中的/proc文件系统,由一组文件夹和文件组成,挂载(mount)与/proc文件夹下. /proc文件系统是一种虚拟文件系统,以文件系统文件夹和文件形式,提供一个 ...
- centos7 virtualbox使用internal network 内网模式
1)打开对应虚拟机的Settings,点开Network, 2)Adapter1如果已经选了挂到Bridged Adapter,则点开Adapter2, 3)选择挂到 Internal Network ...
- Oracle 11R2 linux上新建实例
Step1. root用户远程登陆到linux主机上.执行下面的命令切换到oracle用户,使对应的环境变量配置文件生效. # su oracle# source ~/.bash_profile St ...
- eclipse 查看源代码
文地址:http://blog.csdn.net/sushengmiyan/article/details/18798473 本文作者:sushengmiyan 我们在使用Eclipse的时候,经常是 ...