2017-05-30 2 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'] 

何I午前はこれです:

<?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

は何が必要ですし、インラインコメントを以下に示します。

//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>を追加する必要があります。あなたがここXmlUtil.serialize()

を使用する必要はありません必要 `

関連する問題