我有一个文件夹,其中包含大量文件.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的新手
答案 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以来已经很长时间了,我无法记住这种格式); - )