信息发布→ 登录 注册 退出

ABAP怎么解析和生成XML

发布时间:2025-12-13

点击量:
ABAP中解析和生成XML有四种方式:cl_xml_document(DOM式,适合中小XML)、cl_sxml_reader/writer(流式,内存友好)、7.4+声明式语法(简洁但灵活度低)及7.54+ XML GENERATION/PARSING语句;选择取决于版本、性能与结构复杂度。

abap怎么解析和生成xml

ABAP 中解析和生成 XML 主要靠标准类 cl_xml_document(老式 DOM 方式)和更现代的 cl_sxml_string_writer / cl_sxml_reader(SXML 接口),还有基于 ABAP 7.4+ 的 XML GENERATIONXML PARSING 声明式语法。选哪种取决于你的 ABAP 版本、性能要求和数据结构复杂度。

用 cl_xml_document 解析 XML 字符串

适合中小 XML、需要随机访问节点、兼容老系统(如 7.02 起可用)。

  • 创建实例:DATA doc TYPE REF TO cl_xml_document. doc = cl_xml_document=>create_document( ).
  • 加载 XML:doc->parse_string( xml_string ). —— 若失败会抛 cx_xml_document 异常,记得捕获
  • 查根节点:DATA root TYPE REF TO if_xml_element. root ?= doc->get_root( ).
  • 遍历子节点:LOOP AT root->get_children( ) ASSIGNING FIELD-SYMBOL(<child>).</child>,再用 <child>->get_name( )</child><child>->get_text( )</child> 取值
  • 取属性:DATA attr TYPE string. attr = <child>->get_attribute( 'id' ).</child>

用 cl_sxml_reader 流式解析大 XML(推荐)

内存友好,适合几百 MB 级 XML,不全载入内存,按事件(start tag / text / end tag)逐段处理。

  • 创建 reader:DATA reader TYPE REF TO if_sxml_reader. reader = cl_sxml_string_reader=>create( xml_string ).
  • 循环读取:WHILE reader->read( ) = if_sxml_reader~co_event_start_element.
  • 当前元素名:DATA name TYPE string. name = reader->get_name( ).
  • 如果是文本节点:IF reader->get_event_type( ) = if_sxml_reader~co_event_text. DATA text TYPE string. text = reader->get_text( ).
  • 跳过子树:reader->skip( ).(比如忽略某个不需要的深层节点)

用 cl_sxml_string_writer 生成 XML

比 cl_xml_document 写起来更轻量、更可控,支持缩进、命名空间、CDATA 等。

使用JSON进行网络数据交换传输 中文WORD版 使用JSON进行网络数据交换传输 中文WORD版

本文档主要讲述的是使用JSON进行网络数据交换传输;JSON(J*aScript ObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。 和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 J*aScript 准备的,因此,JSON的数据格式非常简单,您可以用 JSON 传输一个简单的 St

使用JSON进行网络数据交换传输 中文WORD版 0 查看详情 使用JSON进行网络数据交换传输 中文WORD版
  • 创建 writer:DATA writer TYPE REF TO if_sxml_writer. writer = cl_sxml_string_writer=>create( ).
  • 写开始标签:writer->write_start_tag( 'order' ).
  • 写属性:writer->write_attribute( name = 'id' value = '123' ).
  • 写文本内容:writer->write_text( 'ABC' ).
  • 写结束标签:writer->write_end_tag( ).
  • 获取结果:DATA xml_out TYPE string. xml_out = writer->get_output( ).

ABAP 7.4+ 声明式 XML 处理(最简洁)

适合结构固定、映射清晰的场景,一行代码生成或解析,但灵活性较低。

  • 生成:DATA(xml) = |<root><item id="{ lv_id }">{ lv_text }</item></root>|.(字符串模板)
  • 解析(需配合 XSLT 或自定义转换):常用 CALL TRANSFORMATION 配合 ID 或 SIMPLE 模式,例如:
    CALL TRANSFORMATION id SOURCE xml = xml_string RESULT data = ls_struct.(前提是定义好对应 structure 和 transformation)
  • 注意:XML GENERATION 语句(7.54+)可直接从 internal table 生成 XML:
    XML GENERATION OUTPUT INTO DATA(lv_xml) FROM lt_data AS 'items' ITEM AS 'item'.

基本上就这些。小 XML 用 cl_xml_document 最直观;大文件或性能敏感用 SXML Reader/Writer;新项目且结构规整,优先试试声明式语法。别忘了处理编码(UTF-8)、命名空间、特殊字符转义(& → &)这些细节。

以上就是ABAP怎么解析和生成XML的详细内容,更多请关注其它相关文章!


相关文章: ACG动漫视频网入口 ACG动漫*免费正版观看地址  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  Lar*el Eloquent:高效统计带条件关联模型的数量  python3时间如何用calendar输出?  Go语言中构建可靠数据存储的原子性与持久化策略  Node.js中HTML按钮与J*aScript函数交互的正确姿势  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  J*aScript教程:根据元素文本内容动态设置背景色  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  Go RPC HTTP服务正确实现与常见陷阱解析  12306选座怎么选到商务座_12306商务座选择与配置说明  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  抓大鹅解压小游戏 抓大鹅摸鱼解压入口  小米14应用无法联网原因分析_小米14网络权限修复  如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略  J*aScript中localStorage数据的获取、清洗与格式化教程  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  PHP面向对象编程中避免重复创建PDO数据库连接的最佳实践  PHP实现即时文章发布与单次数据库写入:自提交模式教程  《主播少女的秘密账号迷宫》首支宣传片  如何在J*a中使用Locale处理多语言环境  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  谷歌学术网站直达地址 谷歌学术搜索网页版一键进入  字由网在线版登录地址 字由网网页版安全入口  邮政快递包裹最新位置 邮政快递实时追踪入口  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  Lar*el Form Request 中唯一性验证更新操作的正确实践  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  绝地鸭卫平a核爆刀流玩法攻略  Composer的 COMPOSER_PROCESS_TIMEOUT 配置项有什么用_解决因执行时间过长而失败的Composer脚本  Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧  FullCalendar 自定义按钮样式定制指南  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  在Socket.IO连接中实现Access Token自动更新与动态重连  C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略  EMS快递官网app_中国邮政速递物流手机客户端  2025-2030年全球乘用车销量预测:新能源成增长主力  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用  Go语言中JSON数据解析与字段访问教程  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  将PCM16音频数据转换为W*并编码为Base64教程  夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案  厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新  内存检查:在VS Code中调试C++时的内存视图  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!