1. groovy解析xml格式数据

groovy使用xmlSluper对xml进行解析,先定一个xml格式的字符串:

final String xml = '''<response version-api="2.0"><value><books id="1" classification="android"><book available="20" id="1"><title>疯狂Android讲义</title><author id="1">李刚</author></book><book available="14" id="2"><title>第一行代码</title><author id="2">郭林</author></book><book available="13" id="3"><title>Android开发艺术探索</title><author id="3">任玉刚</author></book><book available="5" id="4"><title>Android源码设计模式</title><author id="4">何红辉</author></book></books><books id="2" classification="web"><book available="10" id="1"><title>Vue从入门到精通</title><author id="4">李刚</author></book></books></value></response>
'''

1.1 基本使用

下面是xml解析的一个例子,分别输出了节点和属性:

//开始解析此xml数据
def xmlSluper = new XmlSlurper()
def response = xmlSluper.parseText(xml)println response.value.books[0].book[0].title.text()
println response.value.books[0].book[0].author.text()
println response.value.books[1].book[0].@available

输出结果

疯狂Android讲义
李刚
10

1.2 查询

查询所有作者是李刚的书名:

def xmlSluper = new XmlSlurper()
def response = xmlSluper.parseText(xml)def list = []
response.value.books.each { books ->//下面开始对书结点进行遍历books.book.each { book ->def author = book.author.text()if (author.equals('李刚')) {list.add(book.title.text())}}
}
println list.toListString()

输出结果:

[疯狂Android讲义, Vue从入门到精通]

groovy为我们提供了一个深度遍历的方法,通过该方法一样可以实现上述功能。

def xmlSluper = new XmlSlurper()
def response = xmlSluper.parseText(xml)
//深度遍历xml数据
def titles = response.depthFirst().findAll { book ->return book.author.text() == '李刚' ? true : false
}
println titles.toListString()

深度遍历另一种写法是把depthFirst()使用’**’替换,效果是一样的。
使用广度遍历方法遍历xml数据:

def xmlSluper = new XmlSlurper()
def response = xmlSluper.parseText(xml)//广度遍历xml数据
def name = response.value.books.children().findAll { node ->node.name() == 'book' && node.@id == '2'
}.collect { node ->return node.title.text()
}println name

输出结果:

[第一行代码]

广度遍历children()方法可以使用’*’替代,效果一样。

2. groovy创建xml格式数据

groovy生成xml主要使用MarkupBuilder类,该类是生成xml的核心类。

2.1 基础使用

使用MarkupBuilder类生成xml的例子:

def sw = new StringWriter()
def xmlBuilder = new MarkupBuilder(sw) //用来生成xml数据的核心类
//根结点langs创建成功
xmlBuilder.langs(type: 'current', count: '3',mainstream: 'true') {//第一个language结点language(flavor: 'static', version: '1.5', 'java') {age('16')}language(flavor: 'dynamic', version: '1.6') {age('10')}language(flavor: 'dynamic', version: '1.9', 'JavaScript')
}println sw

输出结果:

<langs type='current' count='3' mainstream='true'> <language flavor='static' version='1.5'>java<age>16</age></language><language flavor='dynamic' version='1.6'><age>10</age></language><language flavor='dynamic' version='1.9'>JavaScript</language>
</langs>

2.2 将实体类数据转换成xml格式数据

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
//对应xml中的langs结点
class Langs {String type = 'current'int count = 3boolean mainstream = truedef languages = [new Language(flavor: 'static',version: '1.5', value: 'Java'),new Language(flavor: 'dynamic',version: '1.3', value: 'Groovy'),new Language(flavor: 'dynamic',version: '1.6', value: 'JavaScript')]
}
//对应xml中的languang结点
class Language {String flavorString versionString value
}

输出结果:

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

groovy xml操作相关推荐

  1. LINQ系列:LINQ to XML操作

    LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...

  2. Qt的Xml操作QDomDocument

    Qt的Xml操作QDomDocument Qt对于Xml的支持是很好的,一些我们需要的操作应有尽有,下面简单介绍一下怎样使用.主要有以下几点使用: 写xml到文件 读xml 添加节点到xml 删除xm ...

  3. php操作xml类,PHP实现的XML操作类【XML Library】

    本文实例讲述了PHP实现的XML操作类.分享给大家供大家参考,具体如下: 这是一个接口程序,需要大量分析解析XML,PHP的xml_parse_into_struct()函数不能直接生成便于使用的数组 ...

  4. Open XML操作Excel导入数据

    项目中发现使用OleDb(using System.Data.OleDb)相关对象处理Excel导入功能,不是很稳定经常出问题,需要把这个问题解决掉.项目组提出使用OpenXML来处理Excel的导入 ...

  5. python读取xml编码gb2312_【转】python XML 操作总结(创建、保存和删除,支持utf-8和gb2312)...

    最近写程序需要用到xml操作,看了看python.org上面的几个xml类库,还是一头雾水,感觉太学术化了,都那么吝惜写几个例子.所以自己整理了一下,算是个小总结,和大家分享一下吧. 对于简单的操作x ...

  6. python对XML 操作

    python对XML 操作 一.XML的读取. 在 NewEdit 中有代码片段的功能,代码片段分为片段的分类和片段的内容.在缺省情况下都是用XML格式保存的.下面我讲述一下,如何使用minidom来 ...

  7. Python XML操作处理

    Python XML操作处理 Python XML操作处理: 可扩展标记语言(XML)是一个很象HTML或SGML的标记语言.这是建议由万维网联盟作为一个开放的标准. 什么是XML ? 可扩展标记语言 ...

  8. C#:XML操作类--转

    写的一个XML操作类,包括读取/插入/修改/删除. using System; using System.Data; using System.Configuration; using System. ...

  9. php xml 格式化,PHP:XML操作

    PHP:XML操作 XML 是一个很实用的东西,存储数据.交换数据都很方便,但如何对 XML 进行基本的操作呢? 对 XML 的操作包括创建 XML 文档,添加.查看.修改.删除数据,操作方法有很多种 ...

最新文章

  1. Centos的yum源更换为国内的阿里云源
  2. java 获得站点地址_JavaWeb项目里面的路径获取方法总结
  3. 华为云严选上新啦!高效准确的数据同步方案来了
  4. 碳酸铜行业调研报告 - 市场现状分析与发展前景预测
  5. 日常问题解决记录三:记一次Win10安装Oracle11g后遇到的问题
  6. 停课集训 11.30
  7. Git分布式版本控制
  8. 代码分享:php对二维数组进行排序
  9. ##智能优化算法复习--免疫算法IA
  10. 检测和分割算法常用的评价指标
  11. 港科夜闻|香港科技大学举办北京冬奥精神云分享会,借鉴成功经验延续奥运精神...
  12. python之利用requests库爬取西刺代理,并检验IP的活性
  13. vue实现鼠标放上去就有提示_Vue实现鼠标经过文字显示悬浮框效果的示例代码
  14. 挖煤小伙带你SSH安全加固
  15. zcy算法入门笔记004
  16. 计组——从一道计算题题开始,展开关于总线平均传输速率的分析
  17. 硬盘坏道检测和修复(HDDL、MHDD、THDD)图文教程
  18. 2020的平凡与感动
  19. 工业与民用配电设计手册第四版_工业电气设计|超赞! 改进版配电柜 内部结构解析大全...
  20. 股票连续跌停后开板表现

热门文章

  1. ipv6协议提供的服务器,ipv6地址获取协议
  2. 5设计模式(基于C/C++实现)-王桂林-专题视频课程
  3. CAD主流电气原理图,通俗易懂,合适工控爱好者学习
  4. Mann-Whitney非参数多组比较R计算方法
  5. 软件工程学习进度表(第十三周)
  6. 城市异常事件精确预测:基于交互注意力机制的时空数据预测模型
  7. 最短路径 Dijkstra算法的Matlab代码实现
  8. javamail阅读回执_使用阅读回执可能会让您变得更好
  9. 中年技术男创业失败经历
  10. 云起实验室:使用RDS和ECS搭建个人博客