在 SAP CPI 中添加节点的 Groovy 脚本

时间:2021-07-23 21:04:28

标签: groovy integration middleware sap-cloud-platform

我试图使用 groovy 脚本添加节点,但输出显示为输入。

输入:

<?xml version='1.0' encoding='UTF-8'?>
  <Records>
     <Line>
     <Field1>ABC</Field1>
     <Field2>123</Field2>
     <Field3>XXX</Field3>
     <Field4>567890</Field4>
     </Line>
   </Records>

代码:

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;``
import groovy.xml.XmlUtil;
import groovy.util.*;

def Message processData(Message message) {
//Body 
   def body = message.getBody(java.lang.String) as String;
   def root = new XmlParser().parseText(body);
   root.Line[0].appendNode("Field5", [:], "MyNewField");
   return message;
}  

请帮助使用 groovy 脚本创建新节点

当 xml 路径也“在此处输入代码”时出现此错误 没有方法签名:groovy.util.NodeList.appendNode()

非常感谢您的回复。我的实际需求包含多个重复节点结构,如下 groovy IDE link. 请看下面的代码示例。我遇到了如下类似的问题。

1 个答案:

答案 0 :(得分:0)

您可以像这样创建一个节点,以便将 Field5 节点添加到数据中的每一行:

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.xml.XmlUtil;
import groovy.util.*;

def Message processData(Message message) {
    def body = message.getBody(java.lang.String);
    def root = new XmlParser().parseText(body)
    root.data.row.each { row ->
        row.appendNode("Field5", "newfield")
    }
    message.setBody(XmlUtil.serialize(root));
    return message;
}

the groovyide.com/cpi code

鉴于您在链接中提供的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<VqlQueryRestResult>
    <responseStatus>SUCCESS</responseStatus>
    <responseDetails>
        <limit>1000</limit>
        <offset>0</offset>
        <size>3</size>
        <total>3</total>
    </responseDetails>
    <data>
        <row>
            <Field1>ABC</Field1>
            <Field2>123</Field2>
            <Field3>XXX</Field3>
            <Field4>567890</Field4>
        </row>
        <row>
            <Field1>ABC</Field1>
            <Field2>123</Field2>
            <Field3>XXX</Field3>
            <Field4>567890</Field4>
        </row>
        <row>
            <Field1>ABC</Field1>
            <Field2>123</Field2>
            <Field3>XXX</Field3>
            <Field4>567890</Field4>
        </row>
    </data>
</VqlQueryRestResult>
相关问题