XmlSlurper.parse(...) returns an object of type GPathResult
To change the content of a node, use replaceBody()
For instance, with the XML file of the previous post, you can change a value of an element this way:
import groovy.xml.XmlUtil
/*
* Lookup customization file
* Search //cus:envValueAssignments[(cus:envValueAssignments/xt:owner/xt:type/text() == $1
* AND //cus:envValueAssignments/xt:owner/xt:path/text() = $2)][xt:envValueType == $3]
* and replace their xt:value with $4
*
*/
def customizations = new XmlSlurper().parse("ALSBCustomizationFile.xml").declareNamespace(xt: 'http://www.bea.com/wli/config/xmltypes',xsi: 'http://www.w3.org/2001/XMLSchema-instance', cus : 'http://www.bea.com/wli/config/customizations')
//println XmlUtil.serialize( customizations )
customizations.'cus:customization'.each {
println "UNO"
if (it.'@xsi:type' == "cus:EnvValueCustomizationType") {
println "TROVATO"
for (item in it.'cus:envValueAssignments') {
if (item.'xt:envValueType' == 'Service URI') {
println "ITEM Service URI, before is " + item.'xt:value'
item.'xt:value'.replaceBody("ciao")
println "ITEM Service URI, after is " + item.'xt:value'
}
}
}
}
println XmlUtil.serialize( customizations )
The document is actually updated the second time you print it.
It was tough to figure this out, the official article on "updating XML with XmlSlurper" suggests to simply assign:
item.'xt:value' = "ciao"
but it simply doesn't work
No comments:
Post a Comment