Groovy基本使用(6):XML 处理

Groovy XML 处理


Groovy 分别使用 MarkupBuilder、XMLParser 来进行XML标记的构建和解析;

构建XML标记

如需要创建以下的XML树:

  
    26317837
    assad
    20
    Guangzhou
  
创建代码如下, 构建XML树对象,并保存到文件;
class CreateAndSave {
    static void main(String[] args){

        def builder = new MarkupBuilder(new PrintWriter("./studentList.xml"));   
        //def builder = new MarkupBuilder();  空参数会直接将XML树打印到标准输出    
        //直接生成字符串 def build = newMarkupBuilder(strings);    println string;
        builder.studentList(createDate:'2017-9-20'){
            student{
                id('26317837')
                name('assad')
                age('20')
                city('Guangzhou')
            }
        }
        
    }
}
以上 MarkupBuilder 用于创建一个XML树构造器对象,builder 使用 . 连接一个节点(后添加的节点会依据前面节点的规则而决定所处的位置),每一个节点后的(attribute:'value')用于定义该节点的属性,('value')用于定义该节点的值,{ }内用于定义该节点的子节点;


如果要实现批量创建节点,类似以下的XML树,可以采用类似如下的方式:

  
    1263781
    assad
    20
    Guangzhou
  
  
    3729321
    Kim
    21
    Shenzhen
  
  
    3729329
    Vency
    22
    Shanghai
  

CreateAndSave.groovy
class CreateAndSave {
    static void main(String[] args){
        //储存student数据
        def students = [ ['1263781','assad','20','Guangzhou'],
                         ['3729321','Kim','21','Shenzhen'],
                         ['3729329','Vency','22','Shanghai'] ];
        def builder2 = new MarkupBuilder(new PrintWriter('./studentList2.xml'));
        //构建XML树
        builder2.studentList(createDate:'2017-9-20'){
            students.each{                        //迭代添加  节点
                element -> builder2.student{   
                    id(element[0])
                    name(element[1])
                    age(element[2])
                    city(element[3])
                }
            }
        }
    
    }
}


解析XML标记

Groovy 使用 XMLParse 类来解析 XML 文件,解析后产生一个XML对象,对于该 XML 树中的元素和属性遍历语法,同 xpath 语法;
以下示例读取解析以上的 studentList2.xml 文件:
class ParseXML {
    static void main(String[] args){
        
        //创建XmlParseer文件,并解析文件,doc对象即为"studentList2.xml"的根节点
        def parser = new XmlParser();   
        def doc = parser.parse("./studentList2.xml");
        //解析字符串 def doc = parser.parseText(xmlstring);
        

        //获取第1个  内容
        def name = doc.student[0].name[0].text();            //output:assad
        //获取  的 createDate 属性
        def createDate = doc['@createDate'];                //output: 2017-9-20

        //遍历答应所有信息
        doc.student.each{ element ->
            println("student: ${element.id[0].text()}, ${element.name[0].text()}, ${element.age[0].text()}, ${element.city[0].text()}");
        }    
        /*output:
            student: 1263781, assad, 20, Guangzhou
            student: 3729321, Kim, 21, Shenzhen
            student: 3729329, Vency, 22, Shanghai
        */  
        
        //可以使用遍历器遍历Node的所有子节点
        def iter = doc.iterator();
        //获取节点名称和值
        node.text();
        node.name();

    }
}

对于XML的构建还可以使用Groovy构造器的语法,详见: http://blog.csdn.net/al_assad/article/details/78044572


你可能感兴趣的:(Groovy,Groovy,基本使用)