Jenkins-如何设置XML属性,然后写回XML文件

Jenkins-如何设置XML属性,然后写回XML文件,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,在我上一篇文章中,我学习了如何读取XML属性,接下来我的最后一项任务是设置属性,例如,我将增加读取属性,然后写回 所以,我有下面的XML文件 <?xml version='1.0' encoding='utf-8'?> <widget android-versionCode="16" id="com.mycomp.myapp" ios-CFBundleVersion="15" version="1.3.0.b4" windows-packageVersion="1.2.6.0

在我上一篇文章中,我学习了如何读取XML属性,接下来我的最后一项任务是设置属性,例如,我将增加读取属性,然后写回

所以,我有下面的XML文件

 <?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="16" id="com.mycomp.myapp" ios-CFBundleVersion="15" version="1.3.0.b4" windows-packageVersion="1.2.6.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>My App</name>
    <description>My app description</description>
    <author>mycom.com.au</author>
但以下几点会

def version = rootNode.attributes()['version']
我现在似乎有同样的问题写回属性

下面我尝试了下面的设置属性

 def filePath = "${env.WORKSPACE}/config.xml"
 def xml = readFile filePath
 def rootNode = new XmlParser().parseText(xml)         
 rootNode.@version = "12345"         
 def writer = new FileWriter(filePath)
 new XmlNodePrinter(new PrintWriter(writer)).print(rootNode)
但我得到了一个类似的错误,当我试图读取属性

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field groovy.util.Node version
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:425)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onSetAttribute(SandboxInterceptor.java:447)
at org.kohsuke.groovy.sandbox.impl.Checker$9.call(Checker.java:405)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedSetAttribute(Checker.java:411)
我确实在Groovey游乐场尝试过这个,它看起来确实有效,但在Jenkins这里不行

因此,看起来
@version
语法再次不起作用,我只是无法调用其他调用(就像获取属性一样)来设置属性

有人对如何做到这一点有什么想法吗


提前感谢您的帮助。

在我发现了更多的测试之后,我们可以简单地使用
[]
访问中的
@
选择器(Edit:Its called),似乎脚本沙盒可以处理这个问题。它可以翻译为发动机罩下的
getAt()
putAt()
,詹金斯将允许其获得批准

node(){
def xml=readFile“${env.WORKSPACE}/config.xml”
def rootNode=new XmlParser().parseText(xml)
打印根节点['@version']
rootNode['@version']=123
打印根节点['@version']
}
结果

Running on Jenkins in /var/jenkins_home/workspace/xmltest
[Pipeline] {
[Pipeline] readFile
[Pipeline] echo
1.3.0.b4
[Pipeline] echo
123
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

我还更新了您关于属性访问的其他问题。再次非常感谢!以上工作100%!我将为将来记下这些语法。
Running on Jenkins in /var/jenkins_home/workspace/xmltest
[Pipeline] {
[Pipeline] readFile
[Pipeline] echo
1.3.0.b4
[Pipeline] echo
123
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS