Cordova Jenkins XmlParser报告没有为根节点的属性找到这样的字段
我有一个包含以下XML文件的项目(Cordova项目的config.XML) 但是当我运行它时,我得到以下错误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
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']