/ / Видалити значення з XML-документа за допомогою groovy - xml, groovy, xmlslurper, groovyshell, jenkins-groovy

Видалити значення з XML-документа за допомогою groovy-xml, groovy, xmlslurper, groovyshell, jenkins-groovy

У мене є партійний скрипт, який потрібно прочитати в XML-документі, змінити значення, а потім зберегти його.

Я зрозумів, як прочитати значення іНапиши це. Я не можу зрозуміти, наскільки мені важливо, як видалити "члени" та його цінності. Мені потрібно видалити всіх учасників і замінити їх на спеціальне ім'я файлу, я просто не можу зрозуміти це.

XML виглядає так:

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

Я б шукав назву "CustomObject" і видалив усіх членів братського брата з цим рядком:

def replace = "MyCustomFile"

Тож XML хотів би так:

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

Я намагався знайти код нижче, який я знайшов в Інтернеті

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

Насправді це нічого не видаляє, а це було виходом:

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

Я все ще намагаюся завісити це, так що будь-яка допомога буде чудовою

Відповіді:

1 для відповіді № 1

Ви можете зробити щось на зразок цього:

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 )
}