使用Groovy -HCI聚合后删除xml标记

2020-08-26 11:18发布

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

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


专家们,

我想使用groovy脚本在聚合后从xml有效负载中删除特定元素。

下面是聚合后的示例XML有效负载。
我想从xml中删除标记。

http://sap.com/xi/XI/SplitAndMerge"> >
<记录>
<行>
AA
BB

ZZ
<记录>
<行>
CC
DD

ZZ

我正在尝试下面的代码,但出现类没有此类属性的错误。

导入groovy.util.XmlSlurper;  
import groovy.xml.XmlUtil;
def消息processData(消息消息){ def root = new XmlParser()。parseText(message.getBody(java.lang.String));
root.Message1.Records.remove(Type)
message.setBody(XmlUtil.serialize(root));
退货信息; }

您能指导我做错什么吗?

谢谢,
Shubham

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

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


专家们,

我想使用groovy脚本在聚合后从xml有效负载中删除特定元素。

下面是聚合后的示例XML有效负载。
我想从xml中删除标记。

http://sap.com/xi/XI/SplitAndMerge"> >
<记录>
<行>
AA
BB

ZZ
<记录>
<行>
CC
DD

ZZ

我正在尝试下面的代码,但出现类没有此类属性的错误。

导入groovy.util.XmlSlurper;  
import groovy.xml.XmlUtil;
def消息processData(消息消息){ def root = new XmlParser()。parseText(message.getBody(java.lang.String));
root.Message1.Records.remove(Type)
message.setBody(XmlUtil.serialize(root));
退货信息; }

您能指导我做错什么吗?

谢谢,
Shubham

付费偷看设置
发送
5条回答
大简至美
1楼 · 2020-08-26 12:10.采纳回答

嗨,Shubham,

如果您想用Groovy解决它,那么您必须注意名称空间前缀。 另外,您应该使用replaceNode函数并将节点替换为什么,而不是remove函数:

 import groovy.util.XmlSlurper;
 导入groovy.xml.XmlUtil;
 def消息processData(消息消息){
 def root = new XmlParser()。parseText(message.getBody(java.lang.String));
 root.'multimap:Message1'.Records.Type.findAll {it.name()=='Type'} .each {it.replaceNode {}}
 message.setBody(XmlUtil.serialize(root));
 返回消息;
 }
 

如果要保存一些字符,也可以使用" **"代替给出完整路径。 (只要您的XML中的另一个XPath/级别上没有类型元素,此方法就起作用。)

 root。'**'。findAll {it.name()=='Type'} .each  {it.replaceNode {}} 

此致,
Raffael

SAP浪
2楼-- · 2020-08-26 12:10

您好,Shubham,

如果要实现这一点,我将使用XSLT映射。 在互联网上足够的例子。

致谢

Tom

Alawn_Xu
3楼-- · 2020-08-26 12:03

您好Shubham

您没有要求Groovy,但要求 T。 van Rooijen 提到,这个问题非常适合XSLT。 您可以按以下方式解决它:

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

这会进行身份转换,即将输入直接复制到输出中。 但是,它会使用空白模板覆盖Type元素,并将其从输出中删除。

它当然也可以在Groovy中完成,但是我会让其他人听到钟声-分页Eng Swee Yeoh Raffael Herrmann :- )

致谢,

Morten

土豆飞人
4楼-- · 2020-08-26 11:51

感谢拉斐尔。 这工作了! :)

xfwsx85
5楼-- · 2020-08-26 11:57

您好,Morten,
我想用Groovy做到这一点,因为我想对有效负载进行其他一些修改。
Groovy帮助我在 单个脚本。

感谢标记Raffael,他的建议对我有用!

致谢,
休巴姆

一周热门 更多>