Jenkins XmlParser报告未找到根节点属性的此类字段

我有一个具有以下XML文件的项目(Cordova项目的config.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>

....

我要做的就是读取根元素()的version属性值(给我一个字符串)。下面的例子在这里,它说要使用获得的属性。1.3.0.b4``widget.@

我的Jenkins文件脚本中包含以下内容…

        script {

def xml = readFile "${env.WORKSPACE}/config.xml"

def rootNode = new XmlParser().parseText(xml)

def version = rootNode.@version

echo 'version is...'

echo version

但是,当我运行它时,出现以下错误。

        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].@versionrootNode[3].@version但是没有任何效果。

有谁知道以上这些有什么问题吗?

提前致谢

如果我使用以下…

def xml = readFile "${env.WORKSPACE}/config.xml"

def rootNode = new XmlParser().parseText(xml)

def version = rootNode.text()

echo 'version is...'

echo version

它打印出My app description有点奇怪的内容(它跳到了description节点)

我尝试使用以下内容。

 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

回答:

回答:

我在还可以修改属性的情况下进行了更多测试,发现使用[]访问时,@属性选择器实际上是有效的。看来这会导致您使用詹金斯(getAtputAt)认可的不同方法。

我们可以简单地使用

def rootNode = new XmlParser().parseText(xml)

println rootNode['@version']

回答:

关于使用脚本沙箱@通过groovy.util.Node对象上的选择器直接访问属性似乎存在一些错误。

一种变通方法是使用该.attributes()方法来获取完整的属性映射,并通过如下所示的键来访问值:

def rootNode = new XmlParser().parseText(xml)

println rootNode.attributes()['version']

这将使首次运行失败,并提示您批准使用method groovy.util.Node attributes,但一旦获得批准,它就会起作用。

以上是 Jenkins XmlParser报告未找到根节点属性的此类字段 的全部内容, 来源链接: utcz.com/qa/411355.html

回到顶部