2009-09-25 49 views
2

有什么改进,我可以改善这个代码?也许有一些常规的语言功能?这个片段平化的XML文件:节点/节点/节点我们可以使这个片段更groovier?

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

我可能会重构代码以使用更实用的风格。

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

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

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

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

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

+0

+1对“不要用一些很酷的东西去,用一些可读的东西去吧” – quip 2009-09-25 14:55:17

+0

你绝对是对的。我也为可读代码!也许你只是误解了我,我搜索了一些可以使用的常用功能。这可能会使这段代码更具可读性。谢谢:) – codevour 2009-09-28 05:11:12

+0

对于你的代码:这是不可能的,只有一个做,而不是在groovy afaik功能 – codevour 2009-09-28 05:14:49

相关问题