我正在尝试将格式化的xml打印到文件中,但我的XmlNodePrinter只打印一个空白文件。我想,我传入的xml对象是正确填充的。我可以使用StreamingMarkupBuilder打印它,但它只在一行上格式化。我不知道为什么我不能使用XmlNodePrinter。这是我的代码的相关部分。
代码的目标是修改xml配置文件。我必须在某个许可下进行查找/替换。
File file = new File("input.xml")
def root = new XmlSlurper().parse(file)
def admins = root.user.findAll {it.@role.text().equals("admin")}
admins.each { admin ->
admin.permission.findAll { it.@type.text().equals("RoleManagement")
}.each {
it.@type = "AdminRoleManagement"
}
}
String filename = "output.xml"
new XmlNodePrinter(new PrintWriter(filename)).print(root)
由于
答案 0 :(得分:2)
我认为XmlNodePrinter
需要Node
而不是GPathResult
XmlSlurper.parse
返回GPathResult
因此,显而易见的解决方案是使用XmlParser
代替XmlSlurper
或者,您可以使用StreamingMarkupBuilder
并执行:
def smb = new StreamingMarkupBuilder().bind { mkp.yield root }
new File( 'output.xml' ).text = groovy.xml.XmlUtil.serialize( smb )