Android Groovy XML解析和构建(八)

首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。

1. XmlParser解析XML

可以解析xml文件,也可以解析字符串。

def persons = new XmlParser().parse("persons.xml")

或者

xmlStr = """
<persons>
    <person name="Mike" address="ShangHai">
        <phone>131111111</phone>
        <phone>131222222</phone>
    </person>
    <person name="Lily" address="BeiJing">
        <phone>132111111</phone>
        <phone>132222222</phone>
    </person>
    <person name="Jack" address="ShenZheng">
        <phone>133111111</phone>
        <phone>133222222</phone>
    </person>
</persons>
"""
def persons = new XmlParser().parseText(xmlStr)

XmlParser直接使用节点名称来访问,通过@+属性名来访问节点属性值,使用text方法来访问内容值。

println persons.person.@name // [Mike, Lily, Jack]
println persons.person[1].@name // Lily
println persons.person[0].phone.collect{it.text()} // [131111111, 131222222]

2. XmlSlurper解析XML

XmlSlurper的用法和XmlParser的调用相似。

def persons = new XmlSlurper().parseText(xmlStr)
println persons.person.@name // [Mike, Lily, Jack]
println persons.person[1].@name // Lily
println persons.person[0].phone.collect{it.text()} // [131111111, 131222222]

XmlSlurper解析命名空间

xmlStr = """
<persons xmlns:app="app">
    <app:person name="Mike" address="ShangHai">
        <phone>131111111</phone>
        <phone>131222222</phone>
    </app:person>
    <person name="Lily" address="BeiJing"> 
        <phone>132111111</phone>
        <phone>132222222</phone>
    </person>
    <app:person name="Jack" address="ShenZheng">
        <phone>133111111</phone>
        <phone>133222222</phone>
    </app:person>
</persons>
"""
def persons = new XmlSlurper().parseText(xmlStr).declareNamespace(x:'app')
println persons.person[1].@name // Lily
println persons.'x:person'[1].@name // Jack

3. MarkupBuilder构建适合中小型文档

writer = new StringWriter()
mb = new groovy.xml.MarkupBuilder(writer)
mb.persons {
    person(name:"Mike", address:"ShangHai") {
        phone(131111111)
        phone(131222222)
    }
    person(name:"Lily", address:"BeiJing") {
        phone(132111111)
        phone(132222222)
    }
    person(name:"Jack", address:"ShengZhen") {
        phone(133111111)
        phone(133222222)
    }
}
println writer

返回

<persons>
    <person name='Mike' address='ShangHai'>
        <phone>131111111</phone>
        <phone>131222222</phone>
    </person>
    <person name='Lily' address='BeiJing'>
        <phone>132111111</phone>
        <phone>132222222</phone>
    </person>
    <person name='Jack' address='ShengZhen'>
        <phone>133111111</phone>
        <phone>133222222</phone>
    </person>
</persons>

4. StreamingMarkupBuilder构建适合大型文档

xmlDoc = new groovy.xml.StreamingMarkupBuilder().bind {
    mkp.xmlDeclaration() // <?xml version='1.0'?>
    mkp.declareNamespace(app:"APP") // 命名空间
    persons {
        comment << "Just comment" // 注释
        app.person(name:"Mike", address:"ShangHai") {
            phone(131111111)
            phone(131222222)
        }
        app.person(name:"Lily", address:"BeiJing") {
            phone(132111111)
            phone(132222222)
        }
        person(name:"Jack", address:"ShengZhen") {
            phone(133111111)
            phone(133222222)
        }
    }
}
println xmlDoc

返回

<?xml version='1.0'?>
<persons xmlns:app='APP'>
    <!--Just comment-->
    <app:person name='Mike' address='ShangHai'>
        <phone>131111111</phone>
        <phone>131222222</phone>
    </app:person>
    <app:person name='Lily' address='BeiJing'>
        <phone>132111111</phone>
        <phone>132222222</phone>
    </app:person>
    <person name='Jack' address='ShengZhen'>
        <phone>133111111</phone>
        <phone>133222222</phone>
    </person>
</persons>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值