ID と文字列のパスのマップを指定して、xml ドキュメントを解析して構築する必要があります。
1) ID 付きのパスのマップ (データベースから収集) は次のとおりです。
def trees = [:]
trees.put(1,"TEST/folder1")
trees.put(2,"TEST/folder2")
trees.put(3,"TEST/folder1/folder1.1")
trees.put(4,"TEST/folder2/folder2.1/folder2.1.2")
trees.put(5,"TEST/folder1/folder1.2")
trees.put(6,"TEST/folder1/folder1.2/folder1.2.1/")
trees.put(7,"TEST/folder1/folder1.2/folder1.2.2/")
trees.put(8,"TEST/folder1/folder1.2/folder1.2.2/1.2.2.1")
2) クロージャの定義
def parseTreeNodes(HashMap<Integer,String> t) {
def treeNodes = [:]
def nodeItems = []
def subItems=[]
t.each { k,v ->
subItems = v.split('/')
subItems.eachWithIndex { node,i ->
if(!treeNodes.values().contains(node)) {
treeNodes.put(id:k,[depth:i,node:node,parent:subItems[i-1]])
}
}
}
println treeNodes.toString() + "---"
}
3) クロージャーを呼び出す
parseTreeNodes(trees)
このフィルターに xml 変換を適用して、重複することなく出力として xml doc を取得する方法は?
4) xml ツリーを変換して名前と ID (最初の繰り返しから抽出) を持つ属性を取得するためのグルーヴィーな方法はありますか ???
<folder name="folder1" id="1" depth="1">
<folder name="folder1.2" id="2" path="folder1/folder1.2" depth="2"/>
<folder>
...
実際、次のマップにはすでにすべてのデータが含まれています。
def treeNodes = [:]
trees.each { k,v ->
subItems = v.split('/')
subItems.eachWithIndex { node,i ->
if(!treeNodes.values().contains(node)) {
treeNodes.put(id:k,[depth:i,node:node,parent:subItems[i-1]])
}
}
}