2009-09-25 47 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

相關問題