我们可以让这个片段更加流畅吗?

时间:2009-09-25 11:16:26

标签: groovy refactoring code-snippets

我有什么改进可以改进这段代码吗?也许有一些时髦的语言功能?此代码段将xml文件展平为:node / node / node

def root = new XmlParser().parse("src/your_xml.xml")

root.depthFirst().each { n ->
    def name = n.name()
    while(n?.parent()){
        name = "${n?.parent()?.name()}/${name}";
        n = n?.parent()
    }
    println name
}

2 个答案:

答案 0 :(得分:2)

我可能会重构代码以使用更实用的样式。

def x = """
<test>
    <test1>
        <test2/>
    </test1>
    <test2>
        <test3/>
        <test4>
            <test5/>
        </test4>
    </test2>
</test>
""".trim()

def root = new XmlParser().parseText(x)

def nodePath(node) {
    node.parent() ? "${nodePath(node.parent())}/${node.name()}" : node.name()
}

root.depthFirst().each {
    println nodePath(it)
}

assert nodePath(root.test2[0].test4[0].test5[0]) == "test/test2/test4/test5"    

答案 1 :(得分:1)

- 编辑:忽略我,我错了[见评论](虽然不是最后一行);

我怀疑你可以写(但我可能错了,我没有这种语言的经验)

while(n = n?.parent()){

但老实说;不要选择那些很酷的东西,选择可读的东西。