1、book.xml文件结构
<?xml version="1.0" encoding="UTF-8" ?>
<Books>
<Book id="1">
<title>Kotlin入门到实战</title>
<author>周伯通</author>
</Book>
<Book id="2">
<title>Groovy入门到实战</title>
<author>杨过</author>
</Book>
<Book id="3">
<title>Scala入门到实战</title>
<author>小龙女</author>
</Book>
<Book id="4">
<title>Java入门到实战</title>
<author>郭靖</author>
</Book>
<Book id="5">
<title>Swift入门到精通</title>
<author>洪七公</author>
</Book>
</Books>
2、代码实现
- 此代码可以创建一个XmlTest类即可,Books与Book都是在XmlTest类,此类为了方便阅读,不创建多个类进行实现,由于代码较少。这里提供了2种创建xml的实现,与一种解析xml的实现
package com.groovy.domain
import groovy.xml.MarkupBuilder
import groovy.xml.XmlSlurper
import org.junit.Test
//Books对象
class Books {
int count = 5
def books = [
new Book(id: System.currentTimeMillis(),title: "Kotlin入门到实战", author: "周伯通"),
new Book(id: System.currentTimeMillis(),title: "Swift入门到实战", author: "杨过"),
new Book(id: System.currentTimeMillis(),title: "Groovy入门到实战", author: "小龙女"),
new Book(id: System.currentTimeMillis(),title: "Scala入门到实战", author: "郭靖"),
new Book(id: System.currentTimeMillis(),title: "Java入门到实战", author: "瑛姑")
]
}
//Book对象
class Book {
Long id
String title
String author
}
class XmlTest {
@Test
void createXmlObject() {
def sw = new StringWriter()
def markupBuilder = new MarkupBuilder(sw)
def books = new Books()
//创建一个Books节点
markupBuilder.Books(count: books.count) {
//获取books数据进行遍历
books.books.forEach { book ->
//获取book数据,创建一个Book节点
Book(id:book.id,title: book.title, author: book.author)
}
}
println(sw)
}
@Test
void createXml() {
def sw = new StringWriter()
def markupBuilder = new MarkupBuilder(sw)
//对Books节点添加一个count属性值为5
markupBuilder.Books(count: 5) {
//在Books创建Book节点,并且给一个id为1的值
//在book节点下创建title与author节点
Book(id: 1) {
title("Kotlin入门到实战")
author("周伯通")
}
Book(id: 2) {
title("Java入门到实战")
author("杨过")
}
Book(id: 3) {
title("Groovy入门到实战")
author("小龙女")
}
Book(id: 4) {
title("Scala入门到实战")
author("瑛姑")
}
Book(id: 5) {
title("Swift入门到实战")
author("郭靖")
}
}
println(sw)
}
@Test
void parseXml() {
//获取xml文件路径
def path = XmlTest.class.getClassLoader().getResource("book.xml").path
//指定文件路径,指定解析编码进行获内容信息
def content = new File(path).getText("utf-8")
//创建XmlSlurper对象
def xmlSlurper = new XmlSlurper()
//解析内容信息,获取book节点
def books = xmlSlurper.parseText(content)
// println(books.Book[0].@id)
//获取多个Book节点
books.Book.forEach { book ->
//使用GPathResult节点路径去获取id值
println("Id=${book.@id},书名称=${book.title},书作者=${book.author}")
}
}
}
3、createXmlObject方法运行的结果
<Books count='5'>
<Book id='1638084704535' title='Kotlin入门到实战' author='周伯通' />
<Book id='1638084704559' title='Swift入门到实战' author='杨过' />
<Book id='1638084704559' title='Groovy入门到实战' author='小龙女' />
<Book id='1638084704560' title='Scala入门到实战' author='郭靖' />
<Book id='1638084704560' title='Java入门到实战' author='瑛姑' />
</Books>
4、createXml方法运行的结果
<Books count='5'>
<Book id='1'>
<title>Kotlin入门到实战</title>
<author>周伯通</author>
</Book>
<Book id='2'>
<title>Java入门到实战</title>
<author>杨过</author>
</Book>
<Book id='3'>
<title>Groovy入门到实战</title>
<author>小龙女</author>
</Book>
<Book id='4'>
<title>Scala入门到实战</title>
<author>瑛姑</author>
</Book>
<Book id='5'>
<title>Swift入门到实战</title>
<author>郭靖</author>
</Book>
</Books>
5、parseXml方法运行的结果
Id=1,书名称=Kotlin入门到实战,书作者=周伯通
Id=2,书名称=Groovy入门到实战,书作者=杨过
Id=3,书名称=Scala入门到实战,书作者=小龙女
Id=4,书名称=Java入门到实战,书作者=郭靖
Id=5,书名称=Swift入门到精通,书作者=洪七公
网友评论