文档章节

【翻译】用Groovy来更新XML

圣洁之子
 圣洁之子
发布于 2015/03/26 07:37
字数 399
阅读 362
收藏 2

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
博文 312
码字总数 92996
作品 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
0
Groovy 2.0 新特性之:模块化的 Groovy 以及扩展

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

红薯
2012/06/30
3.5K
5
Gradle从入门到实战 - Groovy基础

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

亭子happy
06/13
0
0
Gradle 4.4 RC4 发布,项目自动化构建工具

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

达尔文
2017/11/29
366
0
SoapUI+Groovy做接口自动化测试

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

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

没有更多内容

加载失败,请刷新页面

加载更多

Windows 10 设置 Java 环境变量

首先你需要在我的电脑中打开,找到环境变量属性。 找到环境变量属性 找到环境变量属性后单击将会看到下面的设置界面。 在这个界面中设置高级系统设置。 环境变量 在弹出的界面中选择设置环境...

honeymose
41分钟前
1
0
用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
5
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
4
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部