我是Grails / Groovy的新手,我试图在一个xml文件中找到一个节点;我已经弄清楚如何迭代所有这些,但是当找到目标节点时,我想退出循环。我已经读过,而不是使用“每个”,使用“查找”,但我发现的例子是条件。现在我的逻辑是要遍历整个文件而不退出。代码如下:
records.children().each {domain -> println "domain_name: " + domain.@domain_name if (domain.@domain_name == targetDomain) { println "target domain matched: " + domain.@domain_name domain.children().each {misc_field -> println "field_name: " + misc_field.@field_name println "field_type: " + misc_field.@field_type println "field_value: " + misc_field } } }
你不能优雅地做。你可能会看到有些人建议抛出异常,但这只是
plain ugly。
这里有一些mailing list discussion关于使用每个对于,而一对夫妇则表示,因为每个人都无法从迭代中脱颖而出。
你最好的打赌可能是转换为for循环并迭代:
for(def domain : records.children()) { // this may need some tweaking depending on types // do stuff if(condition) { break; } }
或者,就像你说的,也许使用find或findAll找到你要找的元素(以下代码是释义的,我还没有时间来测试):
def result = records.children().find { domain -> domain.@domain_name == targetDomain } result.children().each { // print stuff }
相关问题:
> best-pattern-for-simulating-continue-in-groovy-closure
> is-it-possible-to-break-out-of-closure-in-groovy