I have a SOAP Response for which need to use Groovy script to assert if the date parameter in the row xml child are coming in ascending order.
xml response
<tree>
<row>
<id>123<id>
<date>20220501</date>
</row>
<row>
<id>242<id>
<date>20220502</date>
</row>
<row>
<id>125<id>
<date>20220502</date>
</row>
</tree>
Please help me with the groovy scripting approach/ script for the same, I am a beginner here.
simple sax parsing solution with date (as int) comparison:
import javax.xml.parsers.SAXParserFactory
import javax.xml.streams.*
import org.xml.sax.*
import org.xml.sax.helpers.DefaultHandler
def xml = '''
<tree>
<row>
<id>123</id>
<date>20220501</date>
</row>
<row>
<id>242</id>
<date>20220502</date>
</row>
<row>
<id>125</id>
<date>20220502</date>
</row>
</tree>
'''
class MyHandler extends DefaultHandler {
int lastDate = -1
def parsingDate = false
def ordered = true
void startElement(String namespace, String localname, String qname, Attributes atts){
// enters into <date> tag
parsingDate = (qname == 'date')
}
void characters(char[] ch, int start, int length){
if (parsingDate ){
// get date as int
def date = new String(ch).substring(start,start+length) as int
// comparison
ordered &= (date >= lastDate )
lastDate = date
// else may be throw an exception
}
}
void endElement(String uri, String localName, String qName) {
// exit from date tag
parsingDate = false
}
}
def handler = new MyHandler()
def factory = SAXParserFactory.newInstance()
def reader = factory.newSAXParser().XMLReader
reader.contentHandler = handler
reader.parse(new InputSource(new ByteArrayInputStream(xml.bytes)))
println handler.ordered