我需要打印使用groovy操作过的XML,并保持属性顺序。无论是使用XmlParser/XmlNodePrinter还是XmlSlurper/StreamingMarkupBuilder都可以。我的当前代码如下:
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.@interface.text().equals("RoleManagement")
}.each {
it.@implementation = "AdminRoleManagement"
}
}
def smb = new StreamingMarkupBuilder().bind { mkp.yield root }
new File('output.xml').text = groovy.xml.XmlUtil.serialize(smb)
以下是输入到程序中的XML:
<users>
<user username="test1234" role="admin">
<permission interface="com.test.RoleManagement" implementation="com.test.AdminRoleManagement"/>
<permission interface="com.test.UserAdministration" implementation="com.test.UserAdministrationImpl"/>
</user>
</users>
在我打印修改后的文件后,界面和实现属性被颠倒了。
我知道你在想什么:xml 属性顺序并不重要。但是,我的老板要求保留属性顺序,因为这样做已经很长时间了。实际上,我本来应该使用 Java/DOM4J 编写此解析器,但我想向团队展示一些新东西。感谢任何帮助!