在ABAP中从XML提取值

2020-09-07 09:50发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我需要从XML中提取一个值,如下所示:

<?xml version =" 1.0" encoding =" utf-8"吗?>

- http://schema.sap.com/groupware " xmlns: asx =" http://www.sap.com/abapxml " xmlns:gw =" http://schema.sap.com/groupware " xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance " id =" 999999" type =" response" xsi: schemaLocation =" http://schema.sap.com/groupware http://mobis.wdf。 sap-ag.de:1080/msa/dev/doc/area_mw/components/GWIntegration/Design/GWAdapter/4.0/schema/gwmessage.xsd " xsi:type =" UserListType">

-

- HUMMEL@TEST.DE ">

-

在这里,我需要提取用户smtp_address的值。

此特定XML有一个十六进制值,如下所示:

3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E0A3C6D65737361676520786D6C6E733D22687474703A2F2F736368656D612E7361702E636F6D2F67726F7570776172652220786D6C6E733A6173783D22687474703A2F2F7777772E7361702E636F6D2F61626170786D6C2220786D6C6E733A67773D22687474703A2F2F736368656D612E7361702E636F6D2F67726F7570776172652220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E6365222069643D223939393939392220747970653D22726573706F6E73652220787369

从XML中,我需要提取User smtp_address的值,或者从上述十六进制值中提取。

先谢谢了。

Mahalakshmi

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我需要从XML中提取一个值,如下所示:

<?xml version =" 1.0" encoding =" utf-8"吗?>

- http://schema.sap.com/groupware " xmlns: asx =" http://www.sap.com/abapxml " xmlns:gw =" http://schema.sap.com/groupware " xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance " id =" 999999" type =" response" xsi: schemaLocation =" http://schema.sap.com/groupware http://mobis.wdf。 sap-ag.de:1080/msa/dev/doc/area_mw/components/GWIntegration/Design/GWAdapter/4.0/schema/gwmessage.xsd " xsi:type =" UserListType">

-

- HUMMEL@TEST.DE ">

-

在这里,我需要提取用户smtp_address的值。

此特定XML有一个十六进制值,如下所示:

3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E0A3C6D65737361676520786D6C6E733D22687474703A2F2F736368656D612E7361702E636F6D2F67726F7570776172652220786D6C6E733A6173783D22687474703A2F2F7777772E7361702E636F6D2F61626170786D6C2220786D6C6E733A67773D22687474703A2F2F736368656D612E7361702E636F6D2F67726F7570776172652220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E6365222069643D223939393939392220747970653D22726573706F6E73652220787369

从XML中,我需要提取User smtp_address的值,或者从上述十六进制值中提取。

先谢谢了。

Mahalakshmi

付费偷看设置
发送
4条回答
Violet凡
1楼 · 2020-09-07 10:43.采纳回答

您好,Mahalakshmi,

您可以使用XML DOM对象并解析XML以获取元素(SMTP_ADDRESS)并检索值。

示例代码:

数据:
lr_ixml类型参考到if_ixml,
lr_streamfactory类型参考到if_ixml_stream_factory,
lr_istream类型参考到if_ixml_istream,
lr_document类型参考到if_ixml_document,
lr_parser ,

lr_node_coll类型引用到if_ixml_node_collection,
lr_element类型引用到if_ixml_element,
lr_node类型引用到if_ixml_node,

lv_value TYPE字符串。

*创建XML流事实
lr_streamfactory = lr_ixml-> create_stream_factory()。

*创建输入流
lr_istream = lr_streamfactory-> create_istream_string(lv_xml_string)。 " lv_xml_string将包含字符串格式的XML内容

*创建空文档对象以存储文档和解析器对象
lr_document = lr_ixml-> create_document()。

*创建解析器
lr_parser = lr_ixml-> create_parser(stream_factory = lr_streamfactory
istream = lr_istream
document = lr_document)。

*解析(这将依次创建DOM)
lr_parser-> parse()。

lr_node_coll = lr_document-> get_elements_by_tag_name(name ='ITEM')。

*获取找到的元素数
lv_length = lr_node_coll-> get_length( )。


如果lv_length NE0。

*遍历找到的元素

做lv_length TIMES。


*设置 index(以0开头)
lv_index = sy-index-1。

*获取元素
lr_node = lr_node_coll-> get_item(lv_index)。

*元素的Typecase节点
lr_element?= l r_node。


*获取值

lv_value = lr_element-> get_attribute('')。

ENDDO。

Aaron 3364
2楼-- · 2020-09-07 10:45

我找到了一种简单的方法。 我测试了这段代码,它给了我有效的答复。

具有以下参数的方法:

导入IV_ELEMENT_NAME TYPE STRING

导入IV_XML_STRING TYPE XSTRING
返回值(RV_CONTENT)TYPE STRING


 跨度 {
 字体家族:" Courier New";
 字体大小:10pt;
 颜色:#000000;
 背景:#FFFFFF;
 }
 .L0S32 {
 颜色:#3399FF;
 }
 .L0S33 {
 颜色:#4DA619;
 }
 .L0S52 {
 颜色:#0000FF;
 }
 .L0S55 {
 颜色:#800080;
 }
 .L0S70 {
 颜色:#808080;
 }

 方法get_content_in_xml_tag。

   数据:gt_file类型表smum_xmltb,
         gt_return TYPE bapiret2_t。

   字段符号:类型smum_xmltb。

   通话功能'SMUM_XML_PARSE'
     出口
       xml_input = iv_xml_string
     桌子
       xml_table = gt_file
       return = gt_return。

   使用键cname = iv_element_name读取表gt_file ASSIGNING 。
   如果sy-subrc = 0。
     rv_content =  -cvalue。
   万一。
 终结法。
 
d56caomao
3楼-- · 2020-09-07 10:47

嗨,

请检查以下文档:

http://scn.sap.com/docs/DOC-35493

希望有帮助。

渐行渐远_HoldOn
4楼-- · 2020-09-07 10:57

第一条语句:

*创建XML流事实
lr_streamfactory = lr_ixml-> create_stream_factory()。

短转储。 :-(

完成所有工作有些令人沮丧,并且无法越过第一行。 我不知道它是否经过测试。

错误分析
发生了一个异常,下面将对其进行详细说明。
分配给类'CX_SY_REF_IS_INITIAL'的异​​常未在过程" GET_CONTENT_IN_XML_TAG""((METHOD)")中捕获,也没有 由于该过程的调用者无法预期会发生该异常,因此当前程序已终止。
该异常的原因是:
您尝试使用' NULL"对象引用(指向"无")访问组件。
对象引用必须指向对象(类的实例),然后才能用于访问组件。
从来没有引用过 设置或使用CLEAR语句将其设置为" NULL"。

一周热门 更多>