<Products>
<Product>
<PAYTERM_LABEL>Test 1</PAYTERM_LABEL>
<CurrencyCode>EUR</CurrencyCode>
<DELETED_FLAG>X</DELETED_FLAG>
</Product>
<Product>
<PAYTERM_LABEL>DO NOT USE</PAYTERM_LABEL>
<CurrencyCode>EUR</CurrencyCode>
<DELETED_FLAG></DELETED_FLAG>
</Product>
</Products>
In above xml I would like to set value of <DELETED_FLAG> to “X” If <PAYTERM_LABEL> contains “DO NOT USE”
Thanks for any advice
Simple find/replace would do (modified your original XML for brevity):
import groovy.xml.*
def xml = new XmlParser().parseText '''
<Products>
<Product>
<PAYTERM_LABEL>Test 1</PAYTERM_LABEL>
<CurrencyCode>EUR</CurrencyCode>
<DELETED_FLAG>X</DELETED_FLAG>
</Product>
<Product>
<PAYTERM_LABEL>Test 222</PAYTERM_LABEL>
<CurrencyCode>EUR</CurrencyCode>
<DELETED_FLAG>X</DELETED_FLAG>
</Product>
<Product>
<PAYTERM_LABEL>DO NOT USE</PAYTERM_LABEL>
<CurrencyCode>EUR</CurrencyCode>
<DELETED_FLAG></DELETED_FLAG>
</Product>
</Products>
'''
xml.grep{ 'DO NOT USE' == it.PAYTERM_LABEL.text() }*.DELETED_FLAG*.replaceNode{ DELETED_FLAG 'X' }
XmlUtil.serialize xml
returns
<?xml version="1.0" encoding="UTF-8"?><Products>
<Product>
<PAYTERM_LABEL>Test 1</PAYTERM_LABEL>
<CurrencyCode>EUR</CurrencyCode>
<DELETED_FLAG>X</DELETED_FLAG>
</Product>
<Product>
<PAYTERM_LABEL>Test 222</PAYTERM_LABEL>
<CurrencyCode>EUR</CurrencyCode>
<DELETED_FLAG>NO</DELETED_FLAG>
</Product>
<Product>
<PAYTERM_LABEL>DO NOT USE</PAYTERM_LABEL>
<CurrencyCode>EUR</CurrencyCode>
<DELETED_FLAG>X</DELETED_FLAG>
</Product>
</Products>