
- 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 - Modifying XML
In Groovy, we can modify an XML content easily. In this chapter, we're doing in using following steps.
Load an existing XML document
Navigate through XML document using XmlSlurper
Modify elements and atttibutes in XML document
Serialize the modified document back to string/file
Load and Parse existing XML document
Using XmlSlurper we can load the XML document in the application.
def xmlMovies = ''' <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> ''' // parse xml into movies object def movies = new XmlSlurper().parseText(xmlMovies)
Modification to Elements and Attributes
Now navigate through xml structure and modify the elements and the attributes.
// Change the title of the first movie movies.movie[0].@title = 'GodZilla Plus One' // Add a new element to the first movie movies.movie[0].appendNode { edition 'I' } // Remove an element from second movie movies.movie[1].year.replaceNode {}
Useful methods
replaceNode() − To replace an existing node, we can use replaceNode() within the closure with new node content. It is useful to replace name, attributes or contents of an element.
Assign Values Directly − We can assign values directly for simple text based changes.
appendNode is used to add a new node to the XML document.
@attributeName=value is used to update the value of existing attribute.
replaceNode − To replace/remove a node from an XML document, this method is very useful. We can pass empty closure to remove the node or a new node to replace the existing node.
Serialize the updated XML
Once changes are done, we can serialize the XML into a string or file.
import groovy.xml.XmlUtil def updatedXml = XmlUtil.serialize(movies) println updatedXml
Complete Example - Modification to XML
Example.groovy
import groovy.xml.XmlUtil def xmlMovies = ''' <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> ''' // parse xml into movies object def movies = new XmlSlurper().parseText(xmlMovies) // Change the title of the first movie movies.movie[0].@title = 'GodZilla Plus One' // Add a new element to the first movie movies.movie[0].appendNode { edition 'I' } // Remove an element from second movie movies.movie[1].year.replaceNode {} def updatedXml = XmlUtil.serialize(movies) println updatedXml
Output
When we run the above program, we will get the following result.
<?xml version="1.0" encoding="UTF-8"?><movies> <movie title="GodZilla Plus One"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>PG</stars> <description>10</description> <edition>I</edition> </movie> <movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <rating>R</rating> <stars>R</stars> <description>8</description> </movie> </movies>