文档章节

【翻译】用Groovy来更新XML

圣洁之子
 圣洁之子
发布于 2015/03/26 07:37
字数 399
阅读 360
收藏 2
点赞 0
评论 6

I'm newbie in Groovy and have to accomplish a task for some Jenkins configuration. Please, help me with xml parsing. Just in order to simplify the problem(originally it's a huge Jenkins config.xml file), let's take:

我是Groovy新手。我要完成一项Jenkins配置的任务。请教我解析xml。为了简述问题,下面只是截取了一部分Jenkins的配置文件config.xml:

def input = '''
              <shopping>
                  <category>
                      <item>Pen</item>
                      <color>Red</color>
                  </category>
                  <category>
                      <item>Pencil</item>
                      <color>Black</color>
                  </category>
                  <category>
                      <item>Paper</item>
                      <color>White</color>
                  </category>
              </shopping>
    '''

The target is to change color for Pen only.

目标只是改变Pen的颜色。

I'm trying:

我尝试:

def root = new XmlParser().parseText(input)def supplies = root.category.find{ it.text() == 'Pen' } supplies.parent().color.value() = 'Changed'

Looks so simple but I'm totally lost :( Appreciate any help.

看起来简单我却被搞得一头雾水了。求救。


Almost there...

几乎要实现了。。。

def root = new XmlParser().parseText(input)
def supplies = root.category.find{ it.item.text() == 'Pen' }
supplies.color[0].value = 'Changed'

The thing to note is that color is a Node List whose first node is a text node

要注意的是color是一个Node列表,而其第一个节点是文本节点


....Or use XmlSlurper to simplify usage of color[0] and text().

或者使用 XmlSlurper 去简化 color[0] 和 text() 。

def root = new XmlSlurper().parseText(input)
def supplies = root.category.find{ it.item == 'Pen' }
supplies.color = 'Changed'

完整代码一:

import groovy.xml.XmlUtil
def input = '''
              <shopping>
                  <category>
                      <item>Pen</item>
                      <color>Red</color>
                  </category>
                  <category>
                      <item>Pencil</item>
                      <color>Black</color>
                  </category>
                  <category>
                      <item>Paper</item>
                      <color>White</color>
                  </category>
              </shopping>
    '''
    
def root = new XmlParser().parseText(input)
def supplies = root.category.find{ it.item.text() == 'Pen' }
supplies.color[0].value = 'Changed'


//println root.toString()
println XmlUtil.serialize(root)

完整代码二:

import groovy.xml.XmlUtil
def input = '''
              <shopping>
                  <category>
                      <item>Pen</item>
                      <color>Red</color>
                  </category>
                  <category>
                      <item>Pencil</item>
                      <color>Black</color>
                  </category>
                  <category>
                      <item>Paper</item>
                      <color>White</color>
                  </category>
              </shopping>
    '''
    
def root = new XmlSlurper().parseText(input)
def supplies = root.category.find{ it.item == 'Pen' }
supplies.color = 'Changed'


//println root.toString()
println XmlUtil.serialize(root)


来自: http://wenda.baba.io/questions/3993279/groovy-update-xml.html

© 著作权归作者所有

共有 人打赏支持
圣洁之子
粉丝 6
博文 228
码字总数 91273
作品 0
深圳
后端工程师
加载中

评论(6)

圣洁之子
圣洁之子
http://stackoverflow.com/questions/18385062/writing-updated-xml-to-originally-parsed-file
圣洁之子
圣洁之子
http://stackoverflow.com/questions/5142967/how-to-write-an-xml-to-file-with-just-a-parser-instance
圣洁之子
圣洁之子
http://stackoverflow.com/questions/7477815/ant-in-groovy-copying-a-single-file
圣洁之子
圣洁之子
http://groovy-lang.org/processing-xml.html
圣洁之子
圣洁之子
http://stackoverflow.com/questions/2245641/load-modify-and-write-an-xml-document-in-groovy
圣洁之子
圣洁之子
http://www.ibm.com/developerworks/cn/java/j-pg05199/
实战 Groovy: 构建和解析 XML
开发利器重磅推荐:JVM的编程语言杀手

【IT168 技术】随着各种各样的编程语言铺地盖地向我们涌来,软件世界似乎变得有点疯狂了。JVM的帝国在不断地壮大,它已经不满足于只作为Java语言的运行平台。它勇敢地将自己的触角伸向了JRu...

it168网站 ⋅ 2012/03/17 ⋅ 0

Gradle从入门到实战 - Groovy基础

前言 Android方向的第一期文章,会专注于Gradle系列,名字叫做『 Gradle从入门到实战』,计划有如下几个课程: Groovy基础 全面理解Gradle 如何创建Gradle插件 分析Android的build tools插件...

亭子happy ⋅ 06/13 ⋅ 0

Groovy 2.0 新特性之:模块化的 Groovy 以及扩展

更加模块化的 Groovy 关于 Groovy 2.0 新特性,最后我们要讲到的便是模块化。和 Java 一样,Groovy 不只是一个编程语言,同时还提供一组不同的 API 用于不同用途,包括:模板、Swing UI 构建...

红薯 ⋅ 2012/06/30 ⋅ 5

发起一个Groovy文档的翻译项目

你好,我发起了一个翻译Groovy文档的翻译项目,项目是挂在github上的,地址是: http://cndoc.github.io/groovy-doc-cn/ 有兴趣的朋友可以访问上面的地址,直接点击修改按钮就可以进行翻译了...

cjl2005 ⋅ 2014/09/02 ⋅ 0

Gradle 4.4 RC4 发布,项目自动化构建工具

Gradle 4.4 RC4 发布了。Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语...

达尔文 ⋅ 2017/11/29 ⋅ 0

Centipede 99.3 发布,Java 命令行框架

Centipede 99.3 发布,此版本更新 Guava 到 16.0 版本;更新 Spring 到 4.0.0 版本;如果用户讨厌使用 XML,那么可以使用 Groovy。 Centipede 是一个用来编写命令行应用程序的简单 Java 框架...

oschina ⋅ 2014/01/27 ⋅ 3

折腾Android studio——迁移eclipse下的NDK-lib项目

从eclipse下NDK的Library项目,最近想要迁移到Android studio中来,却怎么也编译不出so文件,折腾好久,才发现,Android studio并不是按照jni文件夹下的mk文件来编译ndk项目,而是由gradle脚...

tnjin ⋅ 2015/11/27 ⋅ 0

SoapUI+Groovy做接口自动化测试

重点看是如何操作Excel中的Properties,以及错误Result Report。 关键词:SoapUI接口测试,接口自动化测试,数据驱动测试,SoapUI进阶使用, Groovy in SoapUI, SoapUI中Groovy的使用,数据分...

还是要坚强 ⋅ 2016/06/29 ⋅ 0

Moqui Framework 1.1.0 发布,企业应用框架

Moqui Framework 1.1.0 发布,该版本主要是 bug 修复了第三方库更新;增加了匿名 authz 功能;增强 JSON 和 REST Web 服务支持;XML 表单扩展的数据库记录 (DbForm*);集成 Apache Camel ;另...

oschina ⋅ 2012/07/24 ⋅ 1

使用 GBench 来测试 Groovy 2.0 的性能

Groovy 2.0 刚刚发布没多久,该版本包含很多新特性,诸如静态编译的特性对性能改进非常明显。 我使用 Groovy 有很多年了,一直耿耿于怀的是 Groovy 缺少 JVM 中的静态编译。因此 Groovy 代码...

红薯 ⋅ 2012/07/09 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ARMS: 原来实时计算可以这么简单!

摘要: 业务实时监控服务( ARMS)是一款阿里云应用性能管理(APM)类监控产品。借助本产品,您可以基于前端、应用、业务自定义等服务,迅速便捷地为企业构建秒级响应的业务监控能力。 业务实...

阿里云云栖社区 ⋅ 4分钟前 ⋅ 0

Monkey入门_琉璃

先下载android sdk安装配置好路径,然后adb shell 如果给你显示这个,说明目前没有有效的移动设备链接,可以开个安卓模拟器或者使用真机,usb或wifi链接到电脑都可以,打开usb调试模式;然后...

EvanDev ⋅ 5分钟前 ⋅ 0

Idea类注释模板

一、设置类注释模板 1.选择File–>Settings–>Editor–>File and Code Templates–>Includes–>File Header. 2.设置完成后,创建类时自动生成注释,效果如下。...

Clarence_D ⋅ 7分钟前 ⋅ 0

vuejs题

1、active-class是哪个组件的属性?嵌套路由怎么定义? 答:vue-router模块的router-link组件。 2、怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答:在router目录下的index.j...

自由小鸟 ⋅ 7分钟前 ⋅ 0

2018年社交系统ThinkSNS年中大促

致各大商企事业单位及粉丝用户: 为感谢大家对ThinkSNS品牌的关注与支持,2018年6月18日官方诚推出:年中大促,限时抢购活动! “ThinkSNS 年中大促,¥6.18超值特惠 名额有限,预购从速! ...

ThinkSNS账号 ⋅ 12分钟前 ⋅ 0

MYSQL主从复制搭建及切换操作(GTID与传统)

如下: MYSQL主从复制方式有默认的复制方式异步复制,5.5版本之后半同步复制,5.6版本之后新增GTID复制,包括5.7版本的多源复制。 MYSQL版本:5.7.20 操作系统版本:linux 6.7 64bit 1、异步...

rootliu ⋅ 13分钟前 ⋅ 0

Java强软弱虚引用Reference

Java强软弱虚引用Reference 本文目的:深入理解Reference 本文定位:学习笔记 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习Reference的同学一些灵感 源码说明 源码基于jdk...

lichuangnk ⋅ 16分钟前 ⋅ 0

plsql 表中字段及注释时为乱码

在windows中创 建一个名为“NLS_LANG”的系统环境变量,设置其值为“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”, 然后重新启动 pl/sql developer,这样检索出来的中文内容就不会是乱码了。如...

江戸川 ⋅ 18分钟前 ⋅ 0

Docker创建JIRA 7.2.7中文破解版

1、介绍 1.1、什么是JIRA?   关于JIRA网上的介绍有很多,以下摘自百度百科:   JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任...

谢思华 ⋅ 22分钟前 ⋅ 0

Java Class 类使用

Java Class 类使用 我们可以通过已知的包名来获取到 Class 对象,从而可以通过反射动态的来操作对象。 获取Class有三种方式 //通过对象.class直接获取Class integerClass = Integer.class;...

gaob2001 ⋅ 27分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部