Groovy Operators

Control Statements

Groovy File Handling

Groovy Error & Exceptions

Groovy Multithreading

Groovy Synchronization

Groovy - Creating XML



Groovy provides multiple ways to create XML. In this chapter we're exploring ways to create an XML.

Using MarkupBuilder

It is most commonly used. Using MarkupBuilder is an elegant way to create XML. MarkupBuilder gives an elegant DSL, Domain Specific Language to generate XML and provide a way to create XML in a natural way.

Example.groovy

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def xmlMovies = new MarkupBuilder(writer)

xmlMovies.movies {
   movie(title: 'Enemy Behind') {
      type('War, Thriller')
      format('DVD')
      year(2003)
      rating('PG')
      stars('PG')
      description(10)
   }
   movie(title: 'Transformers') {
      type('Anime, Science Fiction')
      format('DVD')
      year(1989)
      rating('R')
      stars('R')
      description(8)
   }
}

def generatedXml = writer.toString()
println generatedXml

Output

When we run the above program, we will get the following result.

<movies>
   <movie title='Enemy Behind'>
      <type>War, Thriller</type>
      <format>DVD</format>
      <year>2003</year>
      <rating>PG</rating>
      <stars>PG</stars>
      <description>10</description>
   </movie>
   <movie title='Transformers'>
      <type>Anime, Science Fiction</type>
      <format>DVD</format>
      <year>1989</year>
      <rating>R</rating>
      <stars>R</stars>
      <description>8</description>
   </movie>
</movies>

Key Features of MarkupBuilder

  • Nested ClosureMarkupBuilder creates an XML structure using nested closures, making it easy to generate XML intuitively.

  • Setting Attributes − We can define the attributes with an element closure. For example, title: 'Transformers'.

  • Setting Text Content − Setting text content is easy as setting the last element of the closure as text content. For example, type('Anime, Science Fiction').

  • Insert Arbitrary Content − Using yield() method, we can add arbitrary content or use complex logic.

  • Automatic Conversion − Value passed as text content are automatically converted to string.

Using Collection of MarkupBuilder

We can use collection() method to generate XML

Example.groovy

import groovy.xml.MarkupBuilder

def data = [1 : ['Enemy Behind', 'War, Thriller','DVD','2003', 
   'PG', '10','Talk about a US-Japan war'],
   2 : ['Transformers','Anime, Science Fiction','DVD','1989', 
   'R', '8','A scientific fiction'],
   3 : ['Trigun','Anime, Action','DVD','1986', 
   'PG', '10','Vash the Stam pede'],
   4 : ['Ishtar','Comedy','VHS','1987', 'PG', 
   '2','Viewable boredom ']] 

def markupBuilder = new MarkupBuilder()  

// Compose the builder
def movieDatabase = markupBuilder.collection('shelf': 'New Arrivals') {
   data.each {
      sd -> 
         markupBuilder.movie('title': sd.value[0]) {  
            type(sd.value[1])
            format(sd.value[2])
            year(sd.value[3]) 
            rating(sd.value[4])
            stars(sd.value[4]) 
            description(sd.value[5]) 
         }
      }
   }

Output

When we run the above program, we will get the following result.

<collection shelf = "New Arrivals"> 

   <movie title = "Enemy Behind"> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Talk about a US-Japan war</description> 
   </movie> 
	
   <movie title = "Transformers"> 
      <type>Anime, Science Fiction</type>
      <format>DVD</format> 
      <year>1989</year> 
      <rating>R</rating> 
      <stars>8</stars> 
      <description>A schientific fiction</description> 
   </movie> 
	
   <movie title = "Trigun"> 
      <type>Anime, Action</type> 
      <format>DVD</format> 
      <year>1986</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Vash the Stam pede!</description> 
   </movie> 
	
   <movie title = "Ishtar"> 
      <type>Comedy</type> 
      <format>VHS</format> 
      <year>1987</year> 
      <rating>PG</rating> 
      <stars>2</stars> 
      <description>Viewable boredom </description> 
   </movie> 
	
</collection> 
Advertisements