Cordova Jenkins XmlParser报告没有为根节点的属性找到这样的字段

Cordova Jenkins XmlParser报告没有为根节点的属性找到这样的字段,cordova,jenkins,jenkins-pipeline,Cordova,Jenkins,Jenkins Pipeline,我有一个包含以下XML文件的项目(Cordova项目的config.XML) 但是当我运行它时,我得到以下错误 org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field groovy.util.Node version at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.S

我有一个包含以下XML文件的项目(Cordova项目的config.XML)

但是当我运行它时,我得到以下错误

        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.onGetAttribute(SandboxInterceptor.java:436)
        at org.kohsuke.groovy.sandbox.impl.Checker$8.call(Checker.java:370)
        at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetAttribute(Checker.java:375)
        at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getAttribute(SandboxInvoker.java:37)
我尝试了
rootNode.@version
(如上)
rootNode[0]。@version
rootNode[3]。@version
但没有任何效果

有人知道上面的问题是什么吗

提前谢谢

[EDIT1]

如果我使用下面的

def xml = readFile "${env.WORKSPACE}/config.xml"
def rootNode = new XmlParser().parseText(xml)
def version = rootNode.text()
echo 'version is...'
echo version
它会打印出
我的应用程序描述
,这有点奇怪(它会跳到描述节点)

[EDIT2]

我试着用下面的方法

 def rootNode = new XmlSlurper().parse("${env.WORKSPACE}/config.xml")
 def version = rootNode.@'version'
但我仍然得到一个类似的错误

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field groovy.util.slurpersupport.NodeChild version
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:425)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetAttribute(SandboxInterceptor.java:436)
at org.kohsuke.groovy.sandbox.impl.Checker$8.call(Checker.java:370)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetAttribute(Checker.java:375)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getAttribute(SandboxInvoker.java:37)
at com.cloudbees.groovy.cps.impl.AttributeAccessBlock.rawGet(AttributeAccessBlock.java:20)
at WorkflowScript.run(WorkflowScript:15)
at ___cps.transform___(Native Method)
如果我调用
echo rootNode.text()
,它似乎又一次打印出了主
,widget
标记中前3个标记的内容,即
My AppMy app descriptionmycom.com.au

编辑: 我在能够同时修改属性的上下文中进行了更多的测试,发现在使用
[]
访问时,属性的
@
选择器实际上可以工作。这似乎导致使用不同的方法,你可以在jenkins中批准这些方法(
getAt
putAt

我们可以简单地使用

def rootNode = new XmlParser().parseText(xml)
println rootNode['@version']
原始答复: 在使用脚本沙盒的对象上,使用
@
选择器直接访问属性似乎存在一些错误

解决方法是使用
.attributes()
方法获取属性的完整映射,并通过如下键访问值:

def rootNode = new XmlParser().parseText(xml)
println rootNode.attributes()['version']

这将导致第一次运行失败,并提示您批准使用
方法groovy.util.Node attributes
,但一旦获得批准,就会起作用。

可能存在限制访问某些内容的沙箱。如果有足够的权限,你可以批准一些被阻止的内容,请查看文档@DominikGebhart,是的,我确实有问题,但最终还是按照你上面引用的确切文档解决了这些问题。调用
def rootNode=new XmlParser().parseText(xml)
现在对我有效(不会引发异常)。只有当我添加了行
def version=rootNode.@version
我才得到了异常。例如运行
def text=xmlContents.text()+echo'内容是…“+echo text
确实为我输出了文本(只是不想要我想要的),我可能稍后会尝试重现您的问题,但是过去我记得使用
XMLSlurper
进行类似操作,因此,我检查了差异,它听起来更适合您的用例(它不解析整个DOM,只是惰性评估)。也许你使用它会更成功。看,也许效果更好?编辑:也可以在代码中尝试
def version=rootNode.@'version'
而不是
def version=rootNode.@version
@DominikGebhart我尝试了以上两种方法,但仍然得到了类似的错误-作为EDIT2添加到主要问题中,以便获得格式。XML文件似乎没有任何问题,所以真的不确定它为什么对我不起作用?还尝试了
echo rootNode.parent().text()
。但似乎仍然打印出前3个内部标签的内容。它似乎跳过了外部的“标签”,这是我为这个答案非常感谢你的标签!这正是我所追求的,在经历了这么多小时的挫折之后!
def rootNode = new XmlParser().parseText(xml)
println rootNode['@version']
def rootNode = new XmlParser().parseText(xml)
println rootNode.attributes()['version']