...
Here is an example of reading an existing XML file with Groovy and StAX:
| Code Block |
|---|
// requires stax.jar and stax-api.jarrequire(groupId:'stax', artifactId:'stax-api', version:'1.0.1') // require(groupId:'stax', artifactId:'stax', version:'1.2.0') import javax.xml.stream.* messages = [] currentMessage = '' def processStream(inputStream) { def reader try { reader = XMLInputFactory.newInstance() .createXMLStreamReader(inputStream) while (reader.hasNext()) { if (reader.startElement) processStartElement(reader) reader.next() } } finally { reader?.close() } } def processStartElement(element) { switch(element.name()) { case 'car': currentMessage = element.make + " of " break case 'country': currentMessage += element.text() + " has a " break case 'record': currentMessage += element.type + " record" messages << currentMessage break } } class StaxCategory { static Object get(XMLStreamReader self, String key) { return self.getAttributeValue(null, key) } static String name(XMLStreamReader self) { return self.name.toString() } static String text(XMLStreamReader self) { return self.elementText } } def bytes = XmlExamples.CAR_RECORDS.bytes def inputStream = new ByteArrayInputStream(bytes) use (StaxCategory) { processStream(inputStream) } assert messages == [ 'Holden of Australia has a speed record', 'Peel of Isle of Man has a size record', 'Bugatti of France has a price record' ] |