2017-05-30 74 views
1

我非常接近完成我的代碼。我想只獲取數組中的值。現在我正在獲取XML聲明和行。Groovy XMLSlurper解析值

這裏是我的代碼:

import groovy.xml.XmlUtil 

def serverList = new 
XmlSlurper().parse("/app/jenkins/jobs/firstsos_servers.xml") 

def output = [] 
serverList.Server.find { [email protected] == SERVER}.CleanUp.GZIP.File.each{ 
    output.add(XmlUtil.serialize(it)) 
} 

return output 

這裏是我的XML文件:

<ServerList> 
    <Server name="testserver1"> 
      <CleanUp> 
        <GZIP> 
          <File KeepDays="30">log1</File> 
          <File KeepDays="30">log1.2</File> 
        </GZIP> 
      </CleanUp> 
    </Server> 
    <Server name="testserver2"> 
      <CleanUp> 
        <GZIP> 
          <File KeepDays="30">log2</File> 
        </GZIP> 
      </CleanUp> 
    </Server> 
    <Server name="testserver3"> 
      <CleanUp> 
        <GZIP> 
          <File KeepDays="30">log3</File> 
        </GZIP> 
      </CleanUp> 
    </Server> 

當我選擇testserver1我的輸出應該是:

['log1','log1.2'] 

我我得到的是這樣的:

<?xml version="1.0" encoding="UTF-8"?><File KeepDays="30">log1</File> 
<?xml version="1.0" encoding="UTF-8"?><File KeepDays="30">log2</File> 

回答

2

你不必要求使用XmlUtil.serialize()

以下是你需要什麼,下面的在線評論。

//Define which server you need 
def SERVER = 'testserver1' 
//Pass the 
def serverList = new 
XmlSlurper().parse("/app/jenkins/jobs/firstsos_servers.xml") 

//Get the filtered file names 
def output = serverList.Server.findAll{[email protected] == SERVER}.'**'.findAll{it.name() == 'File'}*.text() 

println output 
return output 

輸出:enter image description here

您可以快速地在線試用Demo

0
def output = [] 
def node = serverList.Server.find { 
    it.'name' = 'testserver1' 
}.CleanUp.GZIP.File.each { 
    output.add(it) 
} 

return output 

也有一個在您的.xml副本&粘貼錯誤。最後必須添加</ServerList>。 `