我正在做一个项目,我需要解析一个 XML 文件并在 100 个不同的 XML 路径/节点上执行完全相同的代码。我的代码目前看起来像这样……</p>
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
}
由于“要做的事情”和异常的“事情”每次都完全相同,唯一改变的是我正在使用的节点。因此,我宁愿将节点表达式发送到方法或像这样扩展节点类......</p>
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 时会出错。
有任何想法吗?