Groovy XMLSlurper解析值

时间:2017-05-30 23:35:26

标签: groovy declaration xmlslurper

我非常接近完成代码。我想只获取数组中的值。现在我正在获取XML声明加上该行。

这是我的代码:

import groovy.xml.XmlUtil

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

def output = []
serverList.Server.find { it.@name == 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 个答案:

答案 0 :(得分: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{it.@name == SERVER}.'**'.findAll{it.name() == 'File'}*.text()

println output
return output

输出:enter image description here

您可以快速在线试用 Demo

答案 1 :(得分:0)

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

return output

还有副本&amp;粘贴.xml中的错误。您必须在最后添加</ServerList>。 `