文档章节

【翻译】用Groovy来更新XML

圣洁之子
 圣洁之子
发布于 2015/03/26 07:37
字数 399
阅读 367
收藏 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
博文 330
码字总数 97588
作品 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
Gradle从入门到实战 - Groovy基础

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

亭子happy
2018/06/13
0
0
开发利器重磅推荐: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.8K
5
Gradle 4.4 RC4 发布,项目自动化构建工具

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

达尔文
2017/11/29
448
0
Centipede 99.3 发布,Java 命令行框架

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

oschina
2014/01/27
621
3

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部