def xmlString = """<soap:Envelope xmlns:soap="http://s...content-available-to-author-only...p.org/soap/envelope/" xmlns:ns2='test' xmlns:ns9='test2'>
<soap:Body>
<ns2:analyzeEffectOfReplaceOfferResponse>
<ns2:productOfferings>
<ns2:productOffering xsi:type="ns2:ProductOfferingInstanceCore" xmlns:xsi="http://w...content-available-to-author-only...3.org/2001/XMLSchema-instance">
<ns2:opExtn>C_P87531945-0993-46d1-8f23-ed23caa6e0cf</ns2:opExtn>
<ns2:productOffering>
<ns9:id>8447669</ns9:id>
</ns2:productOffering>
<ns2:productOffering>
<ns9:id>8447100</ns9:id>
</ns2:productOffering>
</ns2:productOffering>
</ns2:productOfferings>
</ns2:analyzeEffectOfReplaceOfferResponse>
</soap:Body>
</soap:Envelope>"""
def newOfferings = [8447101, 8447102]
def xml = new XmlSlurper().parseText(xmlString)
def offerings = xml.'**'.find{it.name() == 'productOfferings'}
newOfferings.each { val ->
offerings.appendNode {
'ns2.productOffering' {
'ns9.id'(val)
}
}
}
println groovy.xml.XmlUtil.serialize(xml)
ZGVmIHhtbFN0cmluZyA9ICIiIjxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9Imh0dHA6Ly9zLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5wLm9yZy9zb2FwL2VudmVsb3BlLyIgeG1sbnM6bnMyPSd0ZXN0JyB4bWxuczpuczk9J3Rlc3QyJz4KIDxzb2FwOkJvZHk+CiAgPG5zMjphbmFseXplRWZmZWN0T2ZSZXBsYWNlT2ZmZXJSZXNwb25zZT4KICAgICAgPG5zMjpwcm9kdWN0T2ZmZXJpbmdzPgogICAgICAgIDxuczI6cHJvZHVjdE9mZmVyaW5nIHhzaTp0eXBlPSJuczI6UHJvZHVjdE9mZmVyaW5nSW5zdGFuY2VDb3JlIiB4bWxuczp4c2k9Imh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi4zLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+CiAgICAgICAgICAgPG5zMjpvcEV4dG4+Q19QODc1MzE5NDUtMDk5My00NmQxLThmMjMtZWQyM2NhYTZlMGNmPC9uczI6b3BFeHRuPgogICAgICAgICAgIDxuczI6cHJvZHVjdE9mZmVyaW5nPgogICAgICAgICAgICAgIDxuczk6aWQ+ODQ0NzY2OTwvbnM5OmlkPgogICAgICAgICAgIDwvbnMyOnByb2R1Y3RPZmZlcmluZz4KICAgICAgICAgICA8bnMyOnByb2R1Y3RPZmZlcmluZz4KICAgICAgICAgICAgICA8bnM5OmlkPjg0NDcxMDA8L25zOTppZD4KICAgICAgICAgICA8L25zMjpwcm9kdWN0T2ZmZXJpbmc+CiAgICAgICAgPC9uczI6cHJvZHVjdE9mZmVyaW5nPgogICAgIDwvbnMyOnByb2R1Y3RPZmZlcmluZ3M+CiAgPC9uczI6YW5hbHl6ZUVmZmVjdE9mUmVwbGFjZU9mZmVyUmVzcG9uc2U+Cjwvc29hcDpCb2R5Pgo8L3NvYXA6RW52ZWxvcGU+IiIiCgpkZWYgbmV3T2ZmZXJpbmdzID0gWzg0NDcxMDEsIDg0NDcxMDJdCgpkZWYgeG1sID0gbmV3IFhtbFNsdXJwZXIoKS5wYXJzZVRleHQoeG1sU3RyaW5nKQoKZGVmIG9mZmVyaW5ncyA9IHhtbC4nKionLmZpbmR7aXQubmFtZSgpID09ICdwcm9kdWN0T2ZmZXJpbmdzJ30KCm5ld09mZmVyaW5ncy5lYWNoIHsgdmFsIC0+CiAgIG9mZmVyaW5ncy5hcHBlbmROb2RlIHsKICAgICAgICduczIucHJvZHVjdE9mZmVyaW5nJyB7CiAgICAgICAgICAnbnM5LmlkJyh2YWwpCiAgICAgICB9CiAgIH0KfQoKcHJpbnRsbiBncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHhtbCk=