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

来源:互联网 发布:c语言单竖线 编辑:程序博客网 时间:2024/05/16 00:34

Groovy XML 处理


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

构建XML标记

如需要创建以下的XML树:
创建代码如下,构建XML树对象,并保存到文件;
1
class CreateAndSave {
2
    static void main(String[] args){
3
4
        def builder = new MarkupBuilder(new PrintWriter("./studentList.xml"));   //
5
        //def builder = new MarkupBuilder();  空参数会直接将XML树打印到标准输出    
6
        builder.studentList(createDate:'2017-9-20'){
7
            student{
8
                id('26317837')
9
                name('assad')
10
                age('20')
11
                city('Guangzhou')
12
            }
13
        }
14
        
15
    }
16
}
以上 MarkupBuilder 用于创建一个XML树构造器对象,builder 使用 . 连接一个节点(后添加的节点会依据前面节点的规则而决定所处的位置),每一个节点后的(attribute:'value')用于定义该节点的属性,('value')用于定义该节点的值,{ }内用于定义该节点的子节点;


如果要实现批量创建节点,类似以下的XML树,可以采用类似如下的方式:
CreateAndSave.groovy
1
class CreateAndSave {
2
    static void main(String[] args){
3
        //储存student数据
4
        def students = [ ['1263781','assad','20','Guangzhou'],
5
                         ['3729321','Kim','21','Shenzhen'],
6
                         ['3729329','Vency','22','Shanghai'] ];
7
        def builder2 = new MarkupBuilder(new PrintWriter('./studentList2.xml'));
8
        //构建XML树
9
        builder2.studentList(createDate:'2017-9-20'){
10
            students.each{                        //迭代添加 <student> 节点
11
                element -> builder2.student{   
12
                    id(element[0])
13
                    name(element[1])
14
                    age(element[2])
15
                    city(element[3])
16
                }
17
            }
18
        }
19
    
20
    }
21
}

解析XML标记

Groovy 使用 XMLParse 类来解析 XML 文件,解析后产生一个XML对象,对于该 XML 树中的元素和属性遍历语法,同 xpath 语法;
以下示例读取解析以上的 studentList2.xml 文件:
1
class ParseXML {
2
    static void main(String[] args){
3
        
4
        //创建XmlParseer文件,并解析文件,doc对象即为"studentList2.xml"的根节点
5
        def parser = new XmlParser();   
6
        def doc = parser.parse("./studentList2.xml");
7
8
        //获取第1个 <student> 的 <name> 内容
9
        def name = doc.student[0].name[0].text();            //output:assad
10
        //获取 <studentList> 的 createDate 属性
11
        def createDate = doc['@createDate'];                //output: 2017-9-20
12
13
        //遍历答应所有<student>信息
14
        doc.student.each{ element ->
15
            println("student: ${element.id[0].text()}, ${element.name[0].text()}, ${element.age[0].text()}, ${element.city[0].text()}");
16
        }    
17
        /*output:
18
            student: 1263781, assad, 20, Guangzhou
19
            student: 3729321, Kim, 21, Shenzhen
20
            student: 3729329, Vency, 22, Shanghai
21
        */  
22
23
    }
24
}

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


原创粉丝点击