2009-09-25 4 views
2

이 코드를 개선 할 수있는 개선 된 점이 있습니까? 어렴풋한 언어 기능이있을 수 있습니까? 노드/노드/노드이 스 니펫을 그루브로 만들 수 있습니까?

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

- 편집 :이 조각은에 XML 파일을 평평하게 나를 무시, 내가 (아니지만 마지막 줄) [코멘트보기] 틀렸다;

난 당신이 쓸 수 의심

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

그러나 정직하게 (하지만 잘못 될 수있다,이 언어에 경험이 없음); 차갑고 무언가와 함께 가지 말고 읽을 수있는 무언가와 함께 가십시오.

+0

"멋진 것을 가지고 가지 말고 읽을 수있는 것으로 가십시오" – quip

+0

당신 말이 맞습니다. 나는 또한 읽을 수있는 코드입니다! 어쩌면 당신은 저를 잘못 이해할 수 있습니다. 제가 사용할 수있는 그루비 기능을 검색했습니다. 이 코드를 더 읽기 쉽게 만들 수 있습니다. 감사합니다 :) – codevour

+0

귀하의 코드에 대한 : 이것은 할 수있는 동안에만 가능하지만, groovy afaik의 기능이 아닙니다 – codevour

관련 문제