Groovy 从树状结构递归创建xml
我有树状的结构Groovy 从树状结构递归创建xml,groovy,Groovy,我有树状的结构 class FSNode { FSEntity data def parent def children = [] boolean isRoot() { parent == null } } 我这样实例化它 // create filesystem folder def fsEntityDirectory = new FSEntity(name: 'folder') def fsDirectoryNode = new F
class FSNode {
FSEntity data
def parent
def children = []
boolean isRoot() {
parent == null
}
}
我这样实例化它
// create filesystem folder
def fsEntityDirectory = new FSEntity(name: 'folder')
def fsDirectoryNode = new FSNode(parent: null, data: fsEntityDirectory)
def fsEntityDirectory2 = new FSEntity(name: 'folder1')
def fsDirectoryNode2 = new FSNode(parent: fsDirectoryNode, data: fsEntityDirectory2)
// create filesystem file
def fsEntity = new FSEntity(name: 'basic.txt', size: 10) // file system entity
def fsEntityNode = new FSNode(data: fsEntity, parent: fsDirectoryNode)
def fsEntity2 = new FSEntity(name: 'file.png', size: 12)
def fsEntityNode2 = new FSNode(data: fsEntity2, parent: fsDirectoryNode2)
fsDirectoryNode2.children << fsEntityNode2
fsDirectoryNode.children << fsDirectoryNode2
fsDirectoryNode.children << fsEntityNode
<filesystem-root>
<directory name="folder">
<directory name="folder1">
<file name="file.png" size="12" />
</directory>
<file name="basic.txt" size="10" />
</directory>
</filesystem-root>
但最终我得到了
<directory name='folder' />
<directory name='folder1' />
<file name='file.png' size='12' />
<file name='basic.txt' size='10' />
有什么问题吗?您可以尝试以下方法:
def serializeFSNode(FSNode node, MarkupBuilder m) {
if(node.children) {
m.directory(name: node.data.name) {
node.children.each { child ->
serializeFSNode(child, m)
}
}
}
else {
m."${node.data.size ? 'file' : 'directory'}"(name: node.data.name, size: node.data.size)
}
}
哦,我没有想到卷发背带。谢谢
def serializeFSNode(FSNode node, MarkupBuilder m) {
if(node.children) {
m.directory(name: node.data.name) {
node.children.each { child ->
serializeFSNode(child, m)
}
}
}
else {
m."${node.data.size ? 'file' : 'directory'}"(name: node.data.name, size: node.data.size)
}
}