如何将单个xml文件(包含两个单独的xml结构)拆分为多个xml文件

2020-08-16 21:08发布

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

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


您好,

我有以下要求将xml分成两个xml文件。 是否有任何xslt/java映射方法可将如下所示的xml从单个目标xml拆分为两个目标。

输入:单个文件中有两个xml结构。

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

<永久雇员>

<员工>

工程师

........

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

<合同工>

<员工>

Jane

工程师

.........

目标Xml:

-------------------

OutPut1:

<?xml version =" 1.0" encoding =" utf-8"?> Jane Engineer .......。

Output2:

<?xml版本=" 1.0"编码=" utf-8"?> <合同雇员> <雇员> <名字>简 <标题>工程师.......。

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

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


您好,

我有以下要求将xml分成两个xml文件。 是否有任何xslt/java映射方法可将如下所示的xml从单个目标xml拆分为两个目标。

输入:单个文件中有两个xml结构。

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

<永久雇员>

<员工>

工程师

........

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

<合同工>

<员工>

Jane

工程师

.........

目标Xml:

-------------------

OutPut1:

<?xml version =" 1.0" encoding =" utf-8"?> Jane Engineer .......。

Output2:

<?xml版本=" 1.0"编码=" utf-8"?> <合同雇员> <雇员> <名字>简 <标题>工程师.......。

付费偷看设置
发送
8条回答
Climb_Ma
1楼-- · 2020-08-16 21:48

嗨!

例如,使用java映射,您可以拆分源文件并构建多消息输出结构。

关于Evgeniy。

派大星 ヾ
2楼-- · 2020-08-16 22:05

嗨Bhupal!

您应该像阅读文本文件一样阅读源文件。 请勿尝试构建DOM文档。

将文件读入String变量,替换(清除)XML标头,然后添加根标记,就像我上面已经提到的那样。 之后,您将能够构建DOM文档或使用第二个XSL或图形映射来转换您的消息。

Evgeniy。

CJones
3楼-- · 2020-08-16 21:48

您好,
您可以尝试使用Java的XPath API吗? 您可以根据节点级别进行拆分。

https://docs。 oracle.com/javase/6/docs/api/javax/xml/xpath/package-summary.html

您也可以尝试使用dom4j API。

谢谢

Sugata

Cikesha
4楼-- · 2020-08-16 21:57

嗨,Sugata,

谢谢。 我希望你能理解我的要求。下面的单个文件有两个带有diff结构的xml声明,并且在从Java映射中读取xml文档时,文件格式不正确。

<?xml版本=" 1.0"编码=" utf-8"?> <永久雇员<雇员> Jane Engineer ........ <?xml版本=" 1.0" encoding =" utf-8"?> Jane Engineer ...。 .....

半个程序猿
5楼-- · 2020-08-16 22:01

Hello Bhupal,
当您拥有XML声明时-

<?xml version =" 1.0 在源文件中两次" encoding =" utf-8"?

,这将在解析XML时引起问题。 另一点是,您的源文件具有两个不带任何根节点的结构。

考虑到以上事实,您可以执行以下操作-我假设您正在尝试创建两个多带带的文件-一个用于 所有永久雇员记录,以及另一份关于合同雇员的记录。

步骤:

1。 您需要创建一个Java Mapping来删除XML声明,并将Root节点标签添加到源XML-

包com.sap.formatXML中;
 导入java.io.BufferedReader;
 导入java.io.InputStream;
 导入java.io.InputStreamReader;
 导入java.io.Reader;
 导入com.sap.aii.mapping.api.AbstractTransformation;
 导入com.sap.aii.mapping.api.StreamTransformationException;
 导入com.sap.aii.mapping.api.TransformationInput;
 导入com.sap.aii.mapping.api.TransformationOutput;

 公共类FormatXML扩展AbstractTransformation

 {
   公共无效transform(TransformationInput arg0,TransformationOutput arg1)引发StreamTransformationException
           {
         getTrace()。addInfo("已调用JAVA映射");
         字符串inData = convertStreamToString(arg0.getInputPayload()。getInputStream());
         字符串xUTF =" <?xml version = \" 1.0 \" encoding = \" utf-8 \"?>" ;;
         inData = inData.replace(xUTF,"");

         inData =" "。concat(inData).concat(" ");

    尝试
         {
         arg1.getOutputPayload()。getOutputStream()。write(outData.getBytes(" UTF-8"));
         }
         catch(异常e)
          {
             e.toString();
          }
          }
       公共字符串convertStreamToString(InputStream in)
       {
         StringBuffer sb = new StringBuffer();
         尝试
         {
         InputStreamReader isr =新的InputStreamReader(in);
         读者读者=
         新的BufferedReader(isr);
         诠释
         while(((ch = in.read())> -1){
             sb.append((char)ch);}
             reader.close();
         }
         catch(Exception异常)
         {
             exception.toString();
         }
         返回sb.toString();
         }
     } 

上面的代码将删除XML声明并添加一个Root节点标记,该标记将在修改源XML之后生成以下XML-

  
     <员工>
         
         工程师
     
     <员工>
         
          Engineer1 
     
 
 <合同工>
     <员工>
         
         工程师
     
     <员工>
          Jane2 
          Engineer2 
     
 
  

2。 从上述XML创建一个Source XSD并将其分配给发送方接口(接口应为无状态)-

3。 现在为Permanet员工和Contract员工分别创建2个独立的XSD。 然后创建具有两个操作的无状态入站服务接口,并在每个操作中分配XSD-

3。 使用多重映射为源和目标创建消息映射-

按如下所示更改映射中的签名-

4。 创建操作映射-在操作映射中,包括Java映射(第一步)和消息映射(第二步)。 添加入站服务和操作如下-

5, 创建目录对象和通道后,将对其进行测试-将创建两个PI消息,从而创建两个多带带的文件-一个用于Contract,另一个用于永久雇员。

请告诉我是否可行。

谢谢

Sugata

代楠1984
6楼-- · 2020-08-16 21:50

嗨布帕尔,

我对基于根节点拆分消息有相同的要求。 但输出不符合预期。

请检查Java代码并建议更改以获取多个xml文件。

/img/questions/13071004/message-split-in-to-multiple-xml-files-when-the-re.html

谢谢

Ravi M

一周热门 更多>