CSV到XML转换器,包含标题和项目级数据

2020-09-15 02:40发布

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

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


我有一个需要将CSV转换为带有标题和订单项级别数据的XML的要求。 下面是平面文件格式;

标题,名称,日期,总计

项目,A,日期,项目编号,位置,值

项目,B,日期,项目编号,位置,值

商品,C,日期,商品编号,位置,值

"标题"和"项目"是记录类型指示符。"标题"应始终为第一行,并且仅出现一次。

尝试构建XML概要文件和架构时遇到错误。 看起来字段编号标题(4)与项目(20+)的差异也引起了问题


所需的输出低于

 

 <标题>
 <名称>
 <日期>
 <总计>
 

 <项目>
 
 <日期>
 <位置>
 <值>
 

 <项目>
 
 <日期>
 <位置>
 <值>
 

 等等....
  

任何帮助将不胜感激。

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

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


我有一个需要将CSV转换为带有标题和订单项级别数据的XML的要求。 下面是平面文件格式;

标题,名称,日期,总计

项目,A,日期,项目编号,位置,值

项目,B,日期,项目编号,位置,值

商品,C,日期,商品编号,位置,值

"标题"和"项目"是记录类型指示符。"标题"应始终为第一行,并且仅出现一次。

尝试构建XML概要文件和架构时遇到错误。 看起来字段编号标题(4)与项目(20+)的差异也引起了问题


所需的输出低于

 

 <标题>
 <名称>
 <日期>
 <总计>
 

 <项目>
 
 <日期>
 <位置>
 <值>
 

 <项目>
 
 <日期>
 <位置>
 <值>
 

 等等....
  

任何帮助将不胜感激。

5条回答
当学会了学习
1楼 · 2020-09-15 03:13.采纳回答

你好加百利,

有2个选项可以实现这一目标

1)编写脚本并处理内部的所有转换

2)一起使用多个步骤即可达到相同效果。

由于我对#1的了解不是那么好,所以将解释可能对您有帮助的第二种选择(当然,我们的SCN同事将帮助您选择#1)

IFlow:

第1步:脚本

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.xml。*;
 def消息processData(消息消息){
//输入数据
 def body = message.getBody(String.class);
//检索标题数据
     def header_data = body.substring(0,body.indexOf('\ n'));
//删除标识标题或项目的第一个字段
     header_data = header_data.replace('Header,','');
    //表单标题的XML
 String []值= header_data.split(",");
     def writer =新的StringWriter()
 def xml =新的MarkupBuilder(writer)
     xml.header {
     名称{mkp.yield(values [0])}
     日期{mkp.yield(values [1])}
     总计{mkp.yield(values [2])}
     }
        
    //将标头数据存储在标头或属性中,请使用它#4 Content Modifier
     message.setHeader(" P_Header",writer.toString());
    
    //仅将商品数据传递给下一步#2 CSV到XML转换器
     body = body.substring(body.indexOf('\ n')+ 1);
//删除标识标题或项目的第一个字段
     body = body.replace('Item,','');
//将CSV格式的项目数据设置为主体
 message.setBody(body);

 返回消息;
 }
 

第2步:CSV至XML转换器

示例架构:

 
   
     
       
         
           
           
               
               
               
               
               
               
           
         
       
     
   
 
 

第3步:内容过滤器

第4步:内容修改器

希望这会有所帮助!

此致

Sriprasad Shivaram Bhat

一只江湖小虾
2楼-- · 2020-09-15 03:08

好的。 请参阅下面的示例标题数据输入:

HEADER | John | 2018-06-26 | 9,500

谢谢

My梦
3楼-- · 2020-09-15 03:22

你好加百利,

使用以下代码,考虑到您正在处理管道分隔文件,它将对您有用。

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.xml。*;
 def消息processData(消息消息){

     def body = message.getBody(String.class);
     def header_data = body.substring(0,body.indexOf('\ n'));
     header_data = header_data.replace('\ r','');
     header_data = header_data.replace('\ n','');
     header_data = header_data.replace('Header |','');
     String []值= header_data.split(" \\ |");
     def writer =新的StringWriter()
     def xml =新的MarkupBuilder(writer)
     xml.header {
     名称{mkp.yield(values [0])}
     日期{mkp.yield(values [1])}
     总计{mkp.yield(values [2])}
     }
     message.setHeader(" P_Header",writer.toString());
       
     body = body.substring(body.indexOf('\ n')+ 1);
     body = body.replace('Item |','');
     message.setBody(body);
     返回消息;
 }
 

此致

Sriprasad Shivaram Bhat

代楠1984
4楼-- · 2020-09-15 03:15

两种文件格式现在都可以使用。 谢谢。

歪着头看世界
5楼-- · 2020-09-15 03:29

一周热门 更多>