当前位置: 首页 > 面试题库 >

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

郑宇
2023-03-14
问题内容

我有一个具有以下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但是没有任何效果。

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

提前致谢

[EDIT1]

如果我使用以下…

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节点)

[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


问题答案:

编辑:

我在还可以修改属性的情况下进行了更多测试,发现使用[]访问时,@属性选择器实际上是有效的。看来这会导致您使用詹金斯(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,但一旦获得批准,它就会起作用。



 类似资料:
  • 我有以下实体: 然后我创建我的存储库: 但我一开始就收到: 未找到MyTable类型的属性getCountOf 我到底做错了什么?

  • 我确实有一个存储库 没有定义自定义方法。因此,我使用了类似的,它们是预定义的。 我的课程如下 带字段的getter。 目前,我能够将这样的Pois保存到neo4j并将其检索回来,但是当我试图通过cypher处理数据库中的这些节点时,似乎这些字段没有映射到neo4j属性。 我以为spring-data-neo4j会将我的类字段转换为neo4j图形属性。我错了吗? 注意:调用似乎工作得很好。之后,我可

  • 我最近开始使用ReactiveCouchbase Repository(sping-data-Couchbase-3.0.0。M2,Spring-引导-启动器-父-2.0.0。M2)在我们的一个项目中。 我从这里引用了未发布的文档并设置了项目,但我得到了以下错误。 以下是关于设置我的项目的相关信息。 @Maven @爪哇 现在,我确实经历了这个和这个,但在这里,我没有在DummyRepositor

  • 我不知道为什么Spring不喜欢我的代码: 我有: : : < code > entryserviceimpl . Java : 此代码给我一个错误: org.springframework.beans.factory。BeanCreationException:创建名为“entryDao”的bean时出错:调用init方法失败;嵌套异常是org.springframework.data.map。

  • 我正在将XML返回到一个jsp页面。 最终的XML结构如下所示: 的根节点作为向量返回,我使用xtream将其别名为“tasks”,如上图所示。 如何使用XStream实现这一点?我需要使用XSLT文件来转换XML输出吗?完成这一点的最佳方法是什么?

  • 我有一个XML: 我想向根元素:/doc添加一个属性(名称空间),以便输出如下所示: 我尝试了三种xslt(跳过了默认的“复制所有”部分以减少问题的长度)。 xslt1:见下文,问题在于将空名称空间xmlns=”“添加到/doc的所有子节点(即:/doc/tag1和/doc/tag2) Xslt2:见下文,问题是“ns”被添加到根节点:和 xslt3:请参见下文,问题是报告了错误:未定义名称空间前