
- 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.