`

Groovy 动态修改XML

阅读更多
我现在grails+groovy,用Groovy 生成 Flex tree 功能树需要的XML文件,里面用到了递归,可以无限级。下现有二个类:一个是对象TabFunction,这就是我的功能表影射出的对象,Test3是生成XML的测试类。(附件中有:groovy语方法文档。)
package ce.bean

class TabFunction {
    String cCode;                          
    String cName;                          
    String cDescription;                 
    String cParentCode;                   
    Date dCreate=new Date();              
    String cState;                        
    String cGrade                        
    static mapping ={
          version false;
    }
    static constraints = {
     
    }
}



package com

import groovy.xml.StreamingMarkupBuilder
import ce.bean.TabFunction

/**
* Created by IntelliJ IDEA.
* User: mxl
* Date: 2010-3-16
* Time: 15:58:22
* To change this template use File | Settings | File Templates.
*/
class Test3 {


    def str="<funlist></funlist>";
   def void roolMothed(){
      def obj= new TabFunction(cCode:"TOP_SysUserManager",cName:"基础信息维护",cDescription:"系统注册信息管理",cState:"0",cGrade:1,cParentCode:"00");
     obj.id=2;
    def obj1= new TabFunction(cCode:"SYS_UserManager",cName:"用户信息管理",cDescription:"系统注册用户管理",cState:"0",cGrade:2,cParentCode:"TOP_SysUserManager");
     obj1.id=1;
    def obj2=  new TabFunction(cCode:"TOP_SystemManager",cName:"系统信息维护",cDescription:"系统注册信息管理",cState:"0",cGrade:1,cParentCode:"00");
     obj2.id=3;
    def obj3=  new TabFunction(cCode:"fff",cName:"系统信息维护",cDescription:"系统注册信息管理",cState:"0",cGrade:3,cParentCode:"SYS_UserManager");
     obj3.id=5;
         List list=new ArrayList();
     list<<obj1<<obj<<obj2<<obj3;

    println "LAST:::"+ testMethod(list,list,"00",str)

   }
  def String testMethod(all,list,parentCode,str){
        def temp = all.findAll {it.@cParentCode==parentCode};
        def root = new XmlSlurper().parseText(str)  ;
        def outputBuilder = new StreamingMarkupBuilder()
        def tempList=new ArrayList();
        String result="";
        if(parentCode.length()>0){
            temp.each {
                  def tempFun=it;
                  //def obj=root.sysfun.find {it.@cCode == parentCode };
                  root.appendNode{
                           sysfun(cCode:tempFun.cCode,cName:tempFun.cName);
                  }
                  def ll= all.findAll {it.@cParentCode==tempFun.cCode}
                  if (ll.size()>0) ll.each{ tempList<<it};
            }
          
         }else{

            list.each {
                def tempFun=it;
               // println tempFun.cParentCode+":::::"+tempFun.cCode;
                def obj=root.'**'.find{it.@cCode==tempFun.cParentCode};
                obj.appendNode{
                    sysfun(cCode:tempFun.cCode,cName:tempFun.cName);
                }
             
                def ll= all.findAll {it.@cParentCode==tempFun.cCode}
                if (ll.size()>0) ll.each{ tempList<<it};


            }

         }

         result = outputBuilder.bind{ mkp.yield root }
         if(tempList.size()>0)
         testMethod(all,tempList,"",result);
         else{
              return result;
         }
  }


    public static void main(def a){
    new Test3().roolMothed();

    }
}
分享到:
评论

相关推荐

    groovy-xml-2.2.0-beta-1.zip

    Groovy的XML支持是其一大亮点,它提供了一种简洁的语法来操作XML,使得XML处理变得像操作普通的Groovy集合一样简单。例如,通过Groovy的GPath表达式,开发者可以直接使用类似CSS选择器的方式来获取XML节点。此外,...

    xstream_dom4j_jdom_groovy解析xml

    本主题聚焦于四种不同的Java库——XStream、Dom4j、Groovy以及JDOM,它们都是用来解析和操作XML文档的工具。 1. **XStream**: XStream是一个Java库,它提供了将Java对象序列化为XML,以及从XML反序列化回Java对象...

    groovy

    3. 数据处理:Groovy可以方便地处理XML、JSON等数据格式,常用于数据转换和解析。 4. 测试:Spock测试框架使用Groovy编写,提供了富有表达力的测试语句,简化了测试代码的编写。 5. 容器管理:在Apache Kafka、...

    spring-beans-groovy源码

    在实际项目中,`spring-beans-groovy`还支持在运行时动态修改Bean定义,这在处理复杂或不确定的配置时非常有用。例如,我们可以在启动时根据环境变量或配置文件动态生成Groovy脚本,然后通过`...

    groovy经典_资料

    5. **元编程(Metaprogramming)**:Groovy支持元编程,即在运行时修改或扩展类的行为,这为代码的动态扩展提供了可能。 **开发环境搭建:** 要开始使用Groovy,首先确保安装了JDK 1.5或更高版本,并配置好环境...

    groovy+in+action

    - **XML处理**:Groovy内置了强大的XML处理功能,支持XPath查询、DOM操作等。 - **单元测试**:Groovy支持多种单元测试框架,如JUnit、Spock等,提供了更简洁的测试语法。 #### 四、结语 《Groovy in Action》这...

    apache-groovy-sdk-3.0.6.zip

    5. **Groovy类库**:Groovy标准库提供了一系列的类和模块,涵盖了集合操作、元编程、XML处理、网络I/O等多个领域,这些类库极大地丰富了Groovy的内置功能。 6. **Gradle集成**:由于Groovy是Gradle的默认脚本语言,...

    groovy in action.pdf

    Groovy对XML的支持非常强大,不仅提供了内置的解析和生成能力,还有一系列的API和工具,使得XML处理变得简单而高效。 ### 深入Groovy的日常应用 #### 小贴士和技巧 这一部分提供了许多实用的Groovy编程小贴士和...

    Groovy.in.Action.2nd.Edition.pdf

    4. GPath语法:Groovy对XML和类似结构的查询提供了强大的语法支持,使得开发者可以非常方便地查询和操作XML文档和复杂的对象图。 5. 运行时和编译时特性:Groovy在运行时提供了大量的便捷特性,如隐式和显式的类型...

    生成hibernate配置文件和xml的辅助类generate

    Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作,而无需直接编写SQL语句。 在Java项目中,通常需要以下几部分的Hibernate配置: 1. **hibernate.cfg.xml**:这是主...

    Programming_Groovy_2.7z

    - Gradle的Groovy DSL(领域特定语言)比Ant或Maven的XML配置更易读、易写。 6. **Spock测试框架** - Groovy还催生了Spock测试框架,它提供了一种声明式的测试语法,使测试代码更具可读性和维护性。 7. **Groovy...

    groovy_demo

    - **内置DSLs**:Groovy内建了用于构建XML和SQL的DSL,使得处理这些任务更直观。 - **自定义DSL**:Groovy的简洁语法和元编程能力使得构建自己的DSL变得容易,常用于配置和构建工具,如Gradle。 6. **集合操作**...

    apache-groovy-sdk-2.4.4

    4. **Groovy库**:SDK包含了完整的Groovy标准库,这些库提供了许多内置函数和类,覆盖了I/O、网络、XML处理、日期时间等多方面功能,极大地丰富了Groovy的生态系统。 5. **Ant任务**:对于使用Apache Ant构建系统的...

    Groovy学习资料(包括Groovy in action 的中英文以及API)

    此外,Groovy还提供了强大的操作集合、字符串和文件的能力,其内置的GString和AntBuilder等工具使得日常任务处理变得轻松。书中还涵盖了Groovy对XML和JSON的支持,使得数据交换和解析更加便捷。 压缩包中的"API...

    groovy-binary-1.8.6

    9. **构建工具**:Groovy常被用于构建工具如Gradle,它允许使用Groovy脚本替代传统的XML配置,提高了构建脚本的可读性和可维护性。 1. **Spock**:Groovy还有一款强大的测试框架Spock,其基于行为驱动开发(BDD)...

    groovy+maven+spring

    在实际操作中,我们需要在POM.xml文件中配置maven-resources-plugin,指定远程脚本的URL,并在Spring配置文件中定义Bean,指定脚本来源。这样,每次启动或更新脚本时,Spring都会自动加载并执行远程Groovy脚本,实现...

    Groovy入门经典.pdf

    4. **元编程**:Groovy允许在运行时修改类和对象的行为,这是通过元对象协议(Meta Object Protocol, MOP)实现的。元编程为动态扩展和定制对象提供了可能。 5. **GString**:Groovy的GString可以方便地进行字符串...

Global site tag (gtag.js) - Google Analytics