/ / Supprimer les valeurs d'un document XML à l'aide de groovy - xml, groovy, xmlslurper, groovyshell, jenkins-groovy

Supprimez les valeurs d'un document XML à l'aide de groovy - xml, groovy, xmlslurper, groovyshell, jenkins-groovy

J'ai un script de commandes système groovy qui doit lire un document XML, modifier les valeurs, puis l'enregistrer.

J'ai compris comment lire la valeur etécris le. Je n'arrive pas à comprendre comment supprimer des "membres" et ses valeurs. Je dois pouvoir supprimer tous les membres et le remplacer par un nom de fichier personnalisé que je ne peux tout simplement pas comprendre.

Le XML ressemble à ceci:

<types>
<members>*</members>
<members>Account</members>
<members>Activity</members>
<members>Contact</members>
<members>Task</members>
<members>User</members>
<members>ContentVersion</members>
<name>CustomObject</name>
</types>

Je voudrais rechercher le nom "CustomObject" et supprimer tous les membres de la fratrie avec cette chaîne:

def replace = "MyCustomFile"

Donc, le XML aimerait ceci:

<types>
<members>MyCustomFile</members>
<name>CustomObject</name>
</types>

J'ai essayé le code ci-dessous que j'ai trouvé en ligne

println "Testing Slurper"
def root = new XmlSlurper().parse(new File(theFile))
root.types.each { types ->
println "names: ${types.name}"
types.members.each {
println "members: " + it.text()
}
}

println "Testing replace"
def book = "Booking__c"


def cleanUpNode(node) {
println node
def childs = node.children()

def remove = []
childs.each {
if (it instanceof Node) {

if (!it.children()) {
remove.add it
} else {
cleanUpNode it
if (!it.children()) {
remove.add it
}
}
}
}

remove.each { node.remove(it) }
}

cleanUpNode root.types.name

Ce n'est pas réellement enlever quoi que ce soit à la place c'était la sortie:

  <tag0:types>
<tag0:members>*</tag0:members>
<tag0:members>Account</tag0:members>
<tag0:members>Activity</tag0:members>
<tag0:members>Contact</tag0:members>
<tag0:members>Task</tag0:members>
<tag0:members>User</tag0:members>
<tag0:members>ContentVersion</tag0:members>
<tag0:name>CustomObject</tag0:name>
</tag0:types>

J'essaie toujours de comprendre le problème, alors toute aide serait la bienvenue

Réponses:

1 pour la réponse № 1

Vous pouvez faire quelque chose comme ça:

List newMembersToAdd = ["myCustomFile", "anotherCustomFile"]

Node xml = new XmlParser(false, false, false).parse("myXml.xml")

xml.members?.each {
xml.remove it
}

newMembersToAdd.each { String newMember ->
new Node(xml, "members", newMember)
}

new File("myNewXml.xml").withWriter { writer ->
def printer = new XmlNodePrinter( new PrintWriter(writer) )
printer.preserveWhitespace = true
printer.print( xml )
}