Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用groovy从xml文档中删除值_Xml_Groovy_Xmlslurper_Groovyshell_Jenkins Groovy - Fatal编程技术网

使用groovy从xml文档中删除值

使用groovy从xml文档中删除值,xml,groovy,xmlslurper,groovyshell,jenkins-groovy,Xml,Groovy,Xmlslurper,Groovyshell,Jenkins Groovy,我有一个groovy系统批处理脚本,需要读入XML文档,更改值,然后保存它 我已经知道如何读取和写入值。我一辈子都不知道如何删除“成员”及其价值观。我需要能够删除所有的成员,并替换为自定义文件名,我只是不知道它 XML如下所示: <types> <members>*</members> <members>Account</members> <members>Activity</members&g

我有一个groovy系统批处理脚本,需要读入XML文档,更改值,然后保存它

我已经知道如何读取和写入值。我一辈子都不知道如何删除“成员”及其价值观。我需要能够删除所有的成员,并替换为自定义文件名,我只是不知道它

XML如下所示:

<types>
    <members>*</members>
    <members>Account</members>
    <members>Activity</members>
    <members>Contact</members>
    <members>Task</members>
    <members>User</members>
    <members>ContentVersion</members>
    <name>CustomObject</name>
</types>
因此,XML应该是这样的:

<types>
    <members>MyCustomFile</members>
    <name>CustomObject</name>
</types>
它实际上并没有删除任何内容,而是输出:

  <tag0:types>
    <tag0:members>*</tag0:members>
    <tag0:members>Account</tag0:members>
    <tag0:members>Activity</tag0:members>
    <tag0:members>Contact</tag0:members>
    <tag0:members>Task</tag0:members>
    <tag0:members>User</tag0:members>
    <tag0:members>ContentVersion</tag0:members>
    <tag0:name>CustomObject</tag0:name>
  </tag0:types>

*
账户
活动
接触
任务
使用者
内容版本
自定义对象

我仍在努力掌握这方面的诀窍,因此任何帮助都会很好

您可以这样做:

<types>
    <members>MyCustomFile</members>
    <name>CustomObject</name>
</types>
List newMembersToAdd=['myCustomFile','anotherCustomFile']
Node xml=new XmlParser(false,false,false).parse(“myXml.xml”)
xml.members?每个{
xml.xml。删除它
}
newMembersToAdd.each{String newMember->
新节点(xml,'members',newMember)
}
新文件(“myNewXml.xml”)。withWriter{writer->
def打印机=新的XmlNodePrinter(新的PrintWriter(writer))
printer.preserveWhitespace=true
printer.print(xml)
}

我确实需要在读取文件后添加新成员。这也创建了一个名称空间,我在XML中不使用名称空间。移除方法确实有效however@NicolePhillips我编辑了答案,我认为它现在不会创建名称空间。但我没有完全理解从文件中添加新
成员的部分;您是否要添加一个包含所有文件内容的
members
标记?或者您是否需要为每个文件行添加一个新的
members
标记?您可以提供一些示例吗?不可以。在问题的第二个XML示例中,我需要添加一个新的members值,该值可能不止一个。所以基本上我需要用新的值删除旧的成员值。有时候可能根本就没有会员。@NicolePhillips好的,我想我明白了。我更改了代码,以便您可以传递要添加的新成员列表/数组。这对您有帮助吗?获取以下错误:启动失败:Script1.groovy:80:您无法从抽象类“hudson.model.Node”创建实例。@第80行第5列。新节点(xml,'members',newMember)^
  <tag0:types>
    <tag0:members>*</tag0:members>
    <tag0:members>Account</tag0:members>
    <tag0:members>Activity</tag0:members>
    <tag0:members>Contact</tag0:members>
    <tag0:members>Task</tag0:members>
    <tag0:members>User</tag0:members>
    <tag0:members>ContentVersion</tag0:members>
    <tag0:name>CustomObject</tag0:name>
  </tag0:types>