The Apache Groovy programming language - Processing XML

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

构建 XML 标记

如需要创建以下的XML树:

<studentList createDate='2017-9-20'>
  <student>
    <id>26317837</id>
    <name>assad</name>
    <age>20</age>
    <city>Guangzhou</city>
  </student>
</StudentList>

创建代码如下,构建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树,可以采用类似如下的方式:

<studentList createDate='2017-9-20'>
  <student>
    <id>1263781</id>
    <name>assad</name>
    <age>20</age>
    <city>Guangzhou</city>
  </student>
  <student>
    <id>3729321</id>
    <name>Kim</name>
    <age>21</age>
    <city>Shenzhen</city>
  </student>
  <student>
    <id>3729329</id>
    <name>Vency</name>
    <age>22</age>
    <city>Shanghai</city>
  </student>
</studentList>

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{                        //迭代添加 <student> 节点
                element -> builder2.student{   
                    id(element[0])
                    name(element[1])
                    age(element[2])
                    city(element[3])
                }
            }
        }
    
    }
}

解析 XML 标记