- Groovy Tutorial
- Groovy - Home
- Groovy - Overview
- Groovy - Environment
- Groovy - Basic Syntax
- Groovy - Data Types
- Groovy - Variables
- Groovy - Optionals
- Groovy - Numbers
- Groovy - Strings
- Groovy - Ranges
- Groovy - Lists
- Groovy - Maps
- Groovy - Dates & Times
Groovy Operators
- Groovy - Operators
- Groovy - Arithmetic Operators
- Groovy - Assignment Operators
- Groovy - Relational Operators
- Groovy - Logical Operators
- Groovy - Bitwise Operators
- Groovy - Spaceship Operator
- Groovy - in Operator
- Groovy - Elvis Operator
- Groovy - Safe Navigation Operator
- Groovy Operator Precedence & Associativity
Control Statements
- Groovy - Decision Making
- Groovy - If Else Statement
- Groovy - Switch Statement
- Groovy - Loops
- Groovy - For Loop
- Groovy - For-in Loop
- Groovy - While Loop
- Groovy - Do While Loop
- Groovy - Break Statement
- Groovy - Continue Statement
Groovy File Handling
- Groovy - File I/O
- Java - Create a File
- Java - Write to File
- Java - Append to File
- Java - Read Files
- Java - Delete Files
- Java - File Properties
- Java - File Existence and Type
- Java - File Size
- Java - File Permissions
- Java - Directories
- Java - Listing Directories
- Java - Filtering Files/Directories
- Java - Deleting Directories
- Java - Renaming Files/Directories
Groovy Error & Exceptions
- Groovy - Exception Handling
- Groovy - try-catch Block
- Groovy - try-with-resources
- Groovy - Multi-catch Block
- Groovy - Nested try Block
- Groovy - Finally Block
- Groovy - throw Exception
- Groovy - Exception Propagation
- Groovy - Built-in Exceptions
- Groovy - Custom Exception
Groovy Multithreading
- groovy - Multithreading
- groovy - Thread Life Cycle
- groovy - Creating a Thread
- groovy - Starting a Thread
- groovy - Joining Threads
- groovy - Naming Thread
- groovy - Thread Scheduler
- groovy - Thread Pools
- groovy - Main Thread
- groovy - Thread Priority
- groovy - Daemon Threads
- groovy - Shutdown Hook
Groovy Synchronization
- groovy - Synchronization
- groovy - Block Synchronization
- groovy - Static Synchronization
- groovy - Inter-thread Communication
- groovy - Thread Deadlock
- groovy - Interrupting a Thread
- groovy - Thread Control
- groovy - Reentrant Monitor
- Groovy - Methods
- Groovy - Methods
- Groovy - Optional parenthesis
- Groovy - Named Arguments
- Groovy - Closures as Arguments
- Groovy - Method Overloading
- Groovy - Method Scope and Visibility
- Groovy - isCase Method
- Groovy - Implicit Return
- Groovy - Variable Arguments
- Groovy - Regular Expressions
- Groovy - Regular Expressions
- Groovy - Defining Regular Expressions
- Groovy - Matcher Object
- Groovy - Regex Tasks
- Groovy - XML
- Groovy - XML
- Groovy - Parsing XML
- Groovy - Creating XML
- Groovy - Modifying XML
- Groovy - Querying XML
- Groovy - Simplified Notation
- Groovy - Closure based Querying
- Groovy - Closure based Creation
- Groovy - JSON
- Groovy - JSON
- Groovy - Parsing JSON
- Groovy - Creating JSON using JsonOutput
- Groovy - Creating JSON using JsonBuilder
- Groovy - Modifying JSON
- Groovy - Error Handling
- Groovy - Handling JSON Arrays
- Groovy - JSON Array Operations
- Groovy - JSON Objects
- Groovy - JSON Object Operations
- Groovy - Generics
- Groovy - Generics
- Groovy - Declaring Generic Types
- Groovy - Bound Type Parameters
- Groovy - Wild Cards
- Groovy - Miscellaneous
- Groovy - Object Oriented
- Groovy - Closures
- Groovy - Annotations
- Groovy - JMX
- Groovy - DSLS
- Groovy - Database
- Groovy - Builders
- Groovy - Command Line
- Groovy - Unit Testing
- Groovy - Template Engines
- Groovy - Meta Object Programming
- Groovy Useful Resources
- Groovy - Quick Guide
- Groovy - Useful Resources
- Groovy - Discussion
Groovy - Closure based Creation of XML
Groovy provides a very powerful and idomatic ways to build XML using closures with the help of MarkupBuilder. It provides a declarative approach to create an XML using closures.
Creating a basic XML document
Using MarkupBuilder we can easily create the XML document as shown below −
Example.groovy
import groovy.xml.MarkupBuilder
def writer = new StringWriter()
def xmlMovies = new MarkupBuilder(writer)
xmlMovies.movies {
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>
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>PG</stars>
<description>10</description>
</movie>
</movies>
Adding attributes
we can add attributes as named parameter in a closure.
Example.groovy
import groovy.xml.MarkupBuilder
def writer = new StringWriter()
def markupBuilder = new MarkupBuilder(writer)
markupBuilder.employee(name: 'Alice', age: 30) {
department('Admin')
}
def generatedXml = writer.toString()
println generatedXml
Output
When we run the above program, we will get the following result.
<employee name='Alice' age='30'> <department>Admin</department> </employee>
Collect data from Lists and create multiple elements
Example.groovy
import groovy.xml.MarkupBuilder
def items = [
[name: 'Laptop', price: 12000],
[name: 'Mouse', price: 250],
[name: 'Keyboard', price: 750]
]
writer = new StringWriter()
builder = new MarkupBuilder(writer)
builder.items {
items.each { product ->
item {
name(product.name)
price(product.price)
}
}
}
println writer.toString()
Output
When we run the above program, we will get the following result.
<items>
<item>
<name>Laptop</name>
<price>12000</price>
</item>
<item>
<name>Mouse</name>
<price>250</price>
</item>
<item>
<name>Keyboard</name>
<price>750</price>
</item>
</items>
Advantages of Closure based XML Creation
Improved Readability − Closure based code resembles closely with XML structure makes it easy to read and understand.
Conciseness −Closure based approach without any boilerplate code is very concise and clear.
Integrated − Groovy control flow and data structures works well with closures which makes XML creation easy..
Expressive − MarkupBuilder employes DSL, Domain Specific Language which makes XML creation looks natural.