如何解决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 举报,一经查实,本站将立刻删除。