Groovy - XmlNodePrinter打印空白文件

时间:2012-04-02 13:36:03

标签: xml groovy

我正在尝试将格式化的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)

由于

1 个答案:

答案 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 )