微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Groovy 验证节点是否存在

如何解决Groovy 验证节点是否存在

我正在尝试在 Groovy 中验证节点是否来自外部系统,如果外部系统有值,则节点带有值,如果系统没有值,则节点不会出现在有效负载中.

基于此,我需要更改/更正现有节点中该记录的新或更新过程。

传入的 XML 是:

true

我创造了这个 groovy:

    <urn:ExternalReqForApprovalImportRequest xmlns:urn="urn:Ariba:Buyer:vrealm_1" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" partition="" variant="">
        <urn:ExternalReqForApprovalInput_Item>
            <urn:item>
                <urn:Name>TEST</urn:Name>
                <urn:Operation>XXXXXX</urn:Operation>
                <urn:HeaderExtrinsics>
                    <Extrinsics>
                        <Extrinsic name="PRRefID">THIS IS THE NODE THAT MAY OR NOT MAY COME</Extrinsic>
                        <Extrinsic name="XXXXXXX">Value</Extrinsic>
                        <Extrinsic name="AnotherField">TValue</Extrinsic>
                    </Extrinsics>
                </urn:HeaderExtrinsics>
            </urn:item>
        </urn:ExternalReqForApprovalInput_Item>
    </urn:ExternalReqForApprovalImportRequest>

我想要实现的是验证名称为 PRRefID 的 Extrinsic 是否出现在 xml 中,如果出现,我需要将 Operation 更新为 UPDATE,如果没有出现,我需要将 NEW 设置为价值。

我尝试将 xpath 映射为属性(可能有一种更简洁的方法可以从直接 xpath 映射它),但我现在的问题是更改值,因为它是具有特定名称的外在属性,显然是也没有正确的分配格式,那么应该是哪种格式?

谢谢。

解决方法

只需要一些语法调整,

FG.'urn:ExternalReqForApprovalInput_Item'.'urn:item'.'urn:HeaderExtrinsics'.Extrinsics.Extrinsic[0].value = "NEW"

您必须在必要时指定命名空间

注意,当你解析时,FG 成为文档的根,所以不要再次指定 urn:ExternalReqForApprovalImportRequest

我假设您正在尝试更新文本节点值

还要注意 Extrinsic 将是一个节点数组,所以你必须通过索引来引用它

,

我终于按照你在命名空间中的建议解决了!

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

def Message processData(Message message) {
    
    map = message.getProperties();
    value = map.get("PRRefID");

    Reader reader = message.getBody(Reader)
    def root = new XmlParser().parse(reader)

if(value == "") {
    root.'urn:ExternalReqForApprovalInput_Item'.'urn:item'.'urn:Operation'[0].value = "NEW"
}
    message.setBody(XmlUtil.serialize(root))
    return message;
}

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。