Gradle系列七之xml文件解析

定义一个xml格式数据:

final String xml = '''
    
        
            
                
                    疯狂Android讲义
                    李刚
                
                
                   第一行代码
                   郭林
               
               
                   Android开发艺术探索
                   任玉刚
               
               
                   Android源码设计模式
                   何红辉
               
           
           
               
                   Vue从入门到精通
                   李刚
               
           
       
    

解析数据:

def xmlSlurper = new XmlSlurper()
def response = xmlSlurper.parseText(xml)
println response.value.books[0].book[0].title
println response.value.books[1].book.@available
println response.value.books[0].book[1].author

打印输出如下:

疯狂Android讲义
10
郭林

查询作者是李刚的书名:

def listBook = []
response.value.books.each { books ->
    books.book.each { book ->
        if (book.author == '李刚') {
            listBook.add(book.title)
        }
    }
}
println listBook

打印输出如下:

[疯狂Android讲义, Vue从入门到精通]
深度遍历xml数据(可以用**替换depthFirst())
def listTitle = response.depthFirst().findAll { book ->
    book.author == '李刚'
}.collect { book ->
    book.title
}
println listTitle

打印输出如下:

[疯狂Android讲义, Vue从入门到精通]
广度遍历xml数据(可以用*替换children())
println response.value.books.children().findAll { node ->
    node.name() == 'book' && node.@id == '2'
}.collect { node ->
    node.title
}

打印输出如下:

[第一行代码]
Groovy中如何创建一个xml格式数据

现在有一个xml格式数据:


    Java
    Groovy
    JavaScript

我们接下来要做的就是用代码生成这段xml数据:

def sw = new StringWriter()
def xmlBuilder = new MarkupBuilder(sw) //用来生成xml数据的核心类
xmlBuilder.langs(type: 'current', count: '3', mainstream: 'true') {
    language(flavor: 'static', version: '1.5', 'Java')
    language(flavor: 'dynamic', version: '1.6', 'Groovy')
    language(flavor: 'dynamic', version: '1.9', 'JavaScript')
}
println sw

打印输出如下:


  Java
  Groovy
  JavaScript

但是事实上,我们往往不是这样去拼凑xml数据的,而是通过数据类来得到xml数据的:

class Langs {
    String type = 'current'
    int count = 3
    boolean mainstream = true
    def languages = [new language(flavor: 'static', version: 1.5, value: 'Java'),
                     new language(flavor: 'dynamic', version: 1.6, value: 'Groovy'),
                     new language(flavor: 'dynamic', version: 1.9, value: 'JavaScript')]
}

class language {
    String flavor
    float version
    String value
}

def sw = new StringWriter()
def xmlBuilder = new MarkupBuilder(sw) //用来生成xml数据的核心类
def langs = new Langs()
xmlBuilder.langs(type: langs.type, count: langs.count, mainstream: langs.mainstream) {
    langs.languages.each {lang ->
        language(flavor: lang.flavor, version: lang.version, lang.value)
    }
}
println sw

打印输出结果一样。

喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!

你可能感兴趣的:(Gradle系列七之xml文件解析)