使用groovy从xml文件夹中获取cvs的信息

时间:2015-02-27 06:51:23

标签: xml groovy

我有一个文件夹,其中包含大量文件.xml,格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<psf version="2.0">
    <provider>
        <project reference="1.0,:pserver:cvs.server:/cvs/repo1,project_1,project_1,branche_1"/>
        <project reference="1.0,:pserver:cvs.server:/cvs/repo1,project_1,project_1,branche_2"/>
        <project reference="1.0,:pserver:cvs.server:/cvs/repo2,project_1,project_1,branche_1"/>
        <project reference="1.0,:pserver:cvs.server:/cvs/repo3,project_1,project_1,branche_1"/>
  ...snip...
    </provider>
</psf>

我编写了一个groovy脚本来获取所有cvs信息,以便我可以co该文件中存在的每个项目。

import groovy.io.FileType
def list = []
def CVSROOT= []
def PRO=[]
def BRA=[]
new File ('xml/folder').eachFile(FileType.FILES) { file ->
    def psf = new XmlParser().parse(file)
    psf.provider[0].project.each
    {
        list << it.'@reference'.split(/(^1.0|,)/)
    }

问题是:每个文件中有很多重复的cvs信息。(相同的CVSROOT,PROJECTS,BRANCHES)。

我的任何解决方案。提前致谢!我是groovy的新手

1 个答案:

答案 0 :(得分:1)

你应该能够做这样的内联:

def projects = new File('/xml/folder').listFiles()
    .findAll { it.file && it.name.endsWith('.xml') }
    .collectMany { file ->
        new XmlParser().parse(file)
                       .provider
                       .project.@reference*.split(/(^1.0|,)/)*.findAll()
                       .collect {
            [ url:it[0], name:it[1], branches:it[2..-1] ]
        }
    }

为您提供如下地图列表:

[[url::pserver:cvs.server:/cvs/repo1, name:project_1, branches:[project_1, branche_1]],
 [url::pserver:cvs.server:/cvs/repo1, name:project_1, branches:[project_1, branche_2]],
 [url::pserver:cvs.server:/cvs/repo2, name:project_1, branches:[project_1, branche_1]],
 [url::pserver:cvs.server:/cvs/repo3, name:project_1, branches:[project_1, branche_1]]]

(不确定你想如何分割reference属性,所以我猜了一下 - 自从我使用CVS以来已经很长时间了,我无法记住这种格式); - )