我正在开发一个项目,我需要解析一个XML文件并在100个不同的XML路径/节点上执行完全相同的代码。我的代码目前看起来像这样...传递XML路径和评估
def items = parser.parseText(inputFile.text)
items.item.each { item ->
try {
// do stuff with item.some_node
} catch(Exception ex) {
//exception stuff
}
try {
// do stuff with item.weight_node
} catch(Exception ex) {
//exception stuff
}
try {
// do stuff with item.another_node[3].sub_node
} catch(Exception ex) {
//exception stuff
}
try {
// do stuff with item.some_node
} catch(Exception ex) {
//exception stuff
}
// do this a 100 times or so with other item node paths
}
由于“东西做”和异常“东西”是完全一样的,每次和改变的是我的工作节点的唯一的事。正因为如此,我宁愿送节点表达的方法或延长节点类是这样的...
def myMethod(currentNode) {
try {
// do stuff
} catch(Exception ex) {
//exception stuff
}
}
items.item.each { item ->
myMethod(item.some_node)
myMethod(item.weight_node)
myMethod(item.another_node[3].sub_node)
myMethod(item.some_node)
}
// OR
def myProcess(NodeList n){
try {
// do stuff
} catch(Exception ex) {
//exception stuff
}
}
NodeList.metaClass.myProcess = { -> myProcess(delegate) }
items.item.each { item ->
item.some_node.myMethod()
item.weight_node.myMethod()
item.another_node[3].sub_node.myMethod()
item.some_node.myMethod()
}
利用该方法尝试我无法弄清楚如何将XPath的传递给方法,然后用它。只要节点实际存在,使用类扩展方法就可以工作。如果它没有,我会尝试调用myProcess时出错。
任何想法?
DSCL,你尝试过解决? – Rao