Jac*_*ble 25 xml grails groovy
我是Grails/Groovy的新手,我正在尝试在xml文件中找到一个节点; 我已经想出如何迭代所有这些,但我想在找到目标节点时退出循环.我读过它而不是使用"each",使用"find",但我看到的查找示例是条件.现在我的逻辑将迭代整个文件而不退出.代码如下:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*ska 43
你不能优雅地做到这一点.您可能会看到有人建议抛出异常,但这只是简单的丑陋.
这里有关于使用vs. 的一些邮件列表讨论,有几个人说这是首选,因为无法从迭代中解脱.eachforforeach
你最好的选择可能是转换到for循环并迭代:
for(def domain : records.children()) { // this may need some tweaking depending on types
// do stuff
if(condition) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,或者像你说的那样,也许使用find或findAll来找到你正在寻找的元素(下面的代码被解释,我还没有时间来测试它):
def result = records.children().find { domain -> domain.@domain_name == targetDomain }
result.children().each {
// print stuff
}
Run Code Online (Sandbox Code Playgroud)
相关的SO问题:
用any或find闭包替换每个循环.
def list = [1, 2, 3, 4, 5]
list.any { element ->
if (element == 2)
return // continue
println element
if (element == 3)
true // break
}
Run Code Online (Sandbox Code Playgroud)
产量
1
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61500 次 |
| 最近记录: |