# grails_xml **Repository Path**: GntLee/grails_xml ## Basic Information - **Project Name**: grails_xml - **Description**: grails项目中创建和解析xml - **Primary Language**: Groovy - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-08-06 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #Grails中创建和解析xml 描述: 以下方法都是写在控制器中的,也可单独的写成util,方便调用,减少代码冗余,此demo为了简单演示,所以写在控制器中。 启动项目,可访问: 创建简单xml: http://host:port/createXml 创建复杂xml: http://host:port/complexXml 解析xml: http://host:port/readXml 创建简单的xml /** * 创建简单的xml */ def createXml() { def sw = new StringWriter() MarkupBuilder mk = new MarkupBuilder(sw) mk.users { user { name("张三") age(20) sex("男") addr("山东") } user { name("小丽") age(18) sex("女") addr("北京") } user { name("小王") age(22) sex("男") addr("贵州") } } println sw render "简单的xml" } 效果: 张三 20 山东 小丽 18 北京 小王 22 贵州 创建复杂的xml def complexXml() { def builder=new groovy.xml.StreamingMarkupBuilder() builder.encoding='utf-8' //设置编码 def person = { mkp.xmlDeclaration() // mkp.declareNamespace("info":"userInfo") //添加命名空间 mkp.declareNamespace("location":"http://www.baidu.com") persons { comment << "用户信息" //添加注释 info.person(id:3){ name("张三") age(22) sex("男") location.addr('重庆') } info.person(id:1){ name("李四") age(20) sex("男") location.addr('北京') } info.person(id:2){ name("小丽") age(19) sex("女") location.addr('天津') } } } def writer = new StringWriter() writer << builder.bind(person) def file = new File("d:\\user.xml") def pw = new PrintWriter(file) pw.print(writer) pw.flush() pw.close() println writer render "复杂" } def writer = new StringWriter() writer << builder.bind(person) def file = new File("d:\\user.xml") def pw = new PrintWriter(file) pw.print(writer) pw.flush() pw.close() println writer render "复杂" } 解析xml def readXml() { params.remove("controller") params.remove("format") params.remove("action") def xml = new XmlSlurper() def result = xml.parse(new File("d:\\usr.xml")) result.user.each {k-> params.name = k.name.toString() params.age = k.age params.sex = k.sex.toString() params.addr = k.addr.toString() User user = new User(params) user.save(flush:true) //打印错误 //println user.errors } render "解析成功" }