在ABAP结构中具有可选元素和两个表的类似xfa的XML的简单转换

2020-08-16 10:39发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我尝试将Adobe Print ...

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

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


我尝试将Adobe Print File的XML转换为ABAP结构。

目标是将pdf-xml传输到labelpoint2(热敏打印机的打印机语言-Datamax,Microplex-Printer)。 我从ABAP结构到Labelpoint2的转换类工作正常。

我的问题是,我必须以混合顺序处理元素。
有时XML文件中仅包含一种类型的标记。 例如仅-标签。

如果对元素进行了排序,那么我将它们转移到ABAP结构中没有任何问题。 但是,如果不对它们进行排序,我的转换将无法进行。 不幸的是,未排序的顺序是常态。

此显示的XML的结果-示例:3次绘制和2次字段之后的未排序元素将被忽略。

我如何更改简单的转换才能使其运行?

我不知道。

请问有人可以帮助我解决此问题吗?

非常感谢。

以简单的形式,xml文件看起来就像变量lf_xml_file的内容。

这是完整的转换报告:

 *&---------------------------------------------  ------------------------ *
 *&报告z_xml_test_st01
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 报告z_xml_test_st01。  
 TYPES:类型为ts_draw,
          文字TYPE char10,
        ts_draw的结尾。  
类型:tt_draw带KEY文本的ts_draw类型标准表。  
 TYPES:类型为ts_field,
          文字TYPE char10,
        ts_field的结尾。  
类型:tt_field带有KEY文本的ts_field类型标准表。  
 TYPES:类型为ts_xml_data,
          t_draw类型tt_draw,
          t_field TYPE tt_field,
        ts_xml_data的结尾。
 数据:lf_xml_file TYPE字符串。  
数据:ls_xml_data类型ts_xml_data,
       lt_xml_content TYPE文件表,
       lf_anz_dat TYPE i,
       lo_xml_document类型参考cl_xml_document,
       lf_filename TYPE本地文件,
       lf_subrc TYPE sy-subrc,
       lf_xml_string TYPE xstring,
       lf_size TYPE sy-tabix。  
 * cl_gui_frontend_services => file_open_dialog(

 *导出* window_title ='选择XML文件'
 * default_filename ='c:\ users \ XXXXXXXXX \ Desktop \ zwn_test_st01.xml'
 * initial_directory ='C:\'
 *变化
 * file_table = lt_xml_content
 * rc = lf_anz_dat *例外情况*其他= 5)。
 ** lf_filename = lt_xml_content [1]。
** lo_xml_document = NEW#()。*
* lo_xml_document-> import_from_file( *出口 *文件名= lf_filename * 接收 * retcode = lf_subrc)。 * * lo_xml_document-> render_2_xstring( *重要 * retcode = lf_subrc *流= lf_xml_string * size = lf_size)。 * XML文件传输 lf_xml_file = | <模板> | 和 | <绘制> | 和 | <值> | 和 | 1 | 和 | | 和 | | 和 | <绘制> | 和 | <值> | 和 | 2 | 和 | | 和 | | 和 | <绘制> | 和 | <值> | 和 | 3 | 和 | | 和 | | 和 | | 和 | <值> | 和 | 1 | 和 | | 和 | | 和 | | 和 | <值> | 和 | 2 | 和 | | 和 | | 和 * | <绘制> | 和 * | <值> | 和 * | 4 | 和 * | | 和 * | | 和 * | | 和 * | <值> | 和 * | 3 | 和 * | | 和 * | | 和 * | <绘制> | 和 * | <值> | 和 * | 5 | 和 * | | 和 * | | 和 | |。 尝试。 呼叫转换zwn_test_st01 *源XML lf_xml_string 源XML lf_xml_file 结果根= ls_xml_data。 捕获cx_st_error INTO DATA(l_error)。 ENDTRY。 BREAK-要点。

简单的转换文件如下:

当然,真正的转换看起来要复杂得多,具有大量可选标签和可选属性。

但是为了显示我的问题,这个简单的版本足够好:

 <?sap.transform简单吗?>
 
  
   
   <模板>
     
         
             
                 <绘制>
                     <值>
                         <文字>
                             
                         
                     
                 
            
            
                <字段>
                    <值>
                        <文字>