簡體   English   中英

在groovy中解析xml文件

[英]Parse xml file in groovy

我正在嘗試為 jenkins 解析 groovy 中的 xml 文件並將特定值保存到變量中。 XML文件:

<?xml version='1.1' encoding='UTF-8'?>
<org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject plugin="workflow-multibranch@2.21">
  <actions/>
  <description></description>
  <properties>
    <org.jenkinsci.plugins.docker.workflow.declarative.FolderConfig plugin="docker-workflow@1.23">
      <dockerLabel></dockerLabel>
      <registry plugin="docker-commons@1.16"/>
    </org.jenkinsci.plugins.docker.workflow.declarative.FolderConfig>
  </properties>
  <folderViews class="jenkins.branch.MultiBranchProjectViewHolder" plugin="branch-api@2.5.6">
    <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
  </folderViews>
  <healthMetrics>
    <com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric plugin="cloudbees-folder@6.12">
      <nonRecursive>false</nonRecursive>
    </com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric>
  </healthMetrics>
  <icon class="jenkins.branch.MetadataActionFolderIcon" plugin="branch-api@2.5.6">
    <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
  </icon>
  <orphanedItemStrategy class="com.cloudbees.hudson.plugins.folder.computed.DefaultOrphanedItemStrategy" plugin="cloudbees-folder@6.12">
    <pruneDeadBranches>true</pruneDeadBranches>
    <daysToKeep>10</daysToKeep>
    <numToKeep>10</numToKeep>
  </orphanedItemStrategy>
  <triggers/>
  <disabled>false</disabled>
  <sources class="jenkins.branch.MultiBranchProject$BranchSourceList" plugin="branch-api@2.5.6">
    <data>
      <jenkins.branch.BranchSource>
        <source class="jenkins.plugins.git.GitSCMSource" plugin="git@4.2.2">
          <id>abcdefg</id>
          <remote>git@github.com:x/y.git</remote>
          <credentialsId>githubcredentials</credentialsId>
          <traits>
            <jenkins.plugins.git.traits.BranchDiscoveryTrait/>
            <jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait plugin="scm-api@2.6.3">
              <includes>branch*</includes>
              <excludes></excludes>
            </jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait>
          </traits>
        </source>
        <strategy class="jenkins.branch.DefaultBranchPropertyStrategy">
          <properties class="java.util.Arrays$ArrayList">
            <a class="jenkins.branch.BranchProperty-array">
              <jenkins.branch.NoTriggerBranchProperty/>
            </a>
          </properties>
        </strategy>
      </jenkins.branch.BranchSource>
    </data>
    <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
  </sources>
  <factory class="org.jenkinsci.plugins.workflow.multibranch.WorkflowBranchProjectFactory">
    <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
    <scriptPath>ci/x/y.jenkinsfile</scriptPath>
  </factory>
</org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject>

我需要寫入變量的值是“branch*”,來自“jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait”。

到目前為止我做了什么:

def job = "ci/x/y.jenkinsfile"

def config = job.getConfigFile()
println("[INFO] loading xml: " + config)
File file = config.getFile()
def xml=new XmlParser().parse(file)

現在,如果我添加這段代碼“println xml.children()”,我確實可以從動作開始。 因此,我嘗試添加“println xml.children().sources()”以及更多內容以達到我想要的值,但我不斷收到錯誤消息。

對 XML 結構了解不多

def xmlDetails = new XmlParser().parseText(xmlText)
def data= xmlDetails.
        sources.
        data.
        "jenkins.branch.BranchSource".
        source.traits.
        "jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait"."includes".text()

assert data=="branch*"

( https://blog.mrhaki.com/2009/10/groovy-goodness-reading-xml.html )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM