Groovy XML解析和构建

Groovy XML解析和构建

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

1、XmlParser解析XML。

(1) 可以解析xml文件,也可以解析字符串。
def persons = new XmlParser().parse("persons.xml")
或者
xmlStr = """

	
		131111111
		131222222
	
	
		132111111
		132222222
	
	
		133111111
		133222222
	

"""
def persons = new XmlParser().parseText(xmlStr)
(2) 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。

(1) 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]
(2) XmlSlurper解析命名空间
xmlStr = """

    
        131111111
        131222222
    
     
        132111111
        132222222
    
    
        133111111
        133222222
    

"""
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
返回

	
		131111111
		131222222
	
	
		132111111
		132222222
	
	
		133111111
		133222222
	

4、StreamingMarkupBuilder构建适合大型文档。

xmlDoc = new groovy.xml.StreamingMarkupBuilder().bind {
	mkp.xmlDeclaration() // 
	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
返回


	
	
		131111111
		131222222
	
	
		132111111
		132222222
	
	
		133111111
		133222222
	

你可能感兴趣的:(Groovy XML解析和构建)