groovy 操作xml


<langs type='current' count='3' mainstream='true'>
<language flavor='static' version='1.5'>Java</language>
<language flavor='dynamic' version='1.6.0'>Groovy</language>
<language flavor='dynamic' version='1.9'>JavaScript</language>
</langs>



//XmlParser使用Gpath,返回Node,NodeList,以及属性对应的Map
//所以你在访问xml文件中的属性时,也就如同访问list和map中的属性
def langs = new XmlParser().parseText(xml)
//获取属性
println langs.attribute("count")
//获取节点
langs.language.each{
println it.text()
}
//结合使用Gpath和spread-dot
def values = langs.language*.text()

//使用XmlSlurper,返回的是groovy.util.slurpersupport.GPathResult
//使用XmlSluper访问xml时在写法上更加的便捷
langs = new XmlSlurper().parseText(xml)
println langs.language.@count
langs.language.each{
println it
}



//构造xml
def out =new StringWriter()
def xml = new MarkupBuilder(out)
//构造一段xml如同构造一个java对象
//groovy引擎在找不到name方法,address方法时,自动识别为添加元素
xml.person{
name(type:'berdy')
address('上海')
friends{
for(i in 1..10)
friend i
}
}
println out.toString()
### 如何在Groovy中解析和生成XML #### 解析XML 为了简化XML的构建和解析,Groovy引入了多种方法。其中一种常用的方式是使用`XmlParser`类来解析XML文件并获取其节点和属性[^2]。 下面展示了一个简单的例子,说明如何利用`XmlParser`读取XML文档: ```groovy def xml = ''' <library> <book id="1"> <title>Great Expectations</title> <author>Charles Dickens</author> </book> <book id="2"> <title>Pride and Prejudice</title> <author>Jane Austen</author> </book> </library> ''' // 创建 XmlParser 对象实例 def parser = new XmlParser() def library = parser.parseText(xml) // 遍历所有的 book 节点 library.book.each { book -> println "Book ID: ${book.@id}" println "Title: ${book.title.text()}" println "Author: ${book.author.text()}" } ``` 这段代码会输出每本书籍对应的ID、书名以及作者名称。 对于更复杂的场景,还可以进一步探索其他功能,比如获取特定条件下的子节点等操作。 #### 生成XML 当涉及到创建新的XML数据时,可以采用`MarkupBuilder`或`StreamingMarkupBuilder`来进行高效的XML编写工作。这里给出一个基于`MarkupBuilder`的例子,用于动态地建立XML结构[^3]。 ```groovy StringWriter writer = new StringWriter() MarkupBuilder builder = new MarkupBuilder(writer) builder.library { books.each { title, author -> book(id: it.key) { title(it.value.title) author(it.value.author) } } } println writer.toString() ``` 此脚本假设有一个名为`books`的地图变量存储着书籍信息(键为唯一标识符)。上述代码片段将会打印出由给定的数据集构成的有效XML字符串。 另外,如果希望得到更为简洁的结果,则可以选择使用`NodeBuilder`,它可以方便地构建树形结构,并允许以路径表达式的形式访问内部元素及其特性值[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值