我正在使用groovy 1.8,我想要一个像这样的列表List<MyQueryClass> queryl=new List<MyQueryClass>()
所以使用下面的循环我可以在这个列表中添加更多内容,我该怎么做?
def queryxml=new XmlSlurper().parse(QueryProvider.class.getResourceAsStream( '/queries.xml' ))
queryxml.query.each { node ->
operation="${node.@operation.text()}"
if(operation.equals(op.create.toString()))
{
query="${node.text()}"
println "$query"
MyQueryClass myQuery=new MyQueryClass (query)
queryl.add(myQuery)
}
}
答案 0 :(得分:3)
道歉,我无法正确回答我的问题。
我想通了,因为我无法用抽象接口java.util.List
List<MyQueryClass> queryl=new ArrayList<MyQueryClass>()
做的工作。谢谢蒂姆和draganstankovic
答案 1 :(得分:1)
你不要给我们太多的东西,但假设你有一个班级:
@groovy.transform.Canonical class MyQuery {
String queryText
}
您的XML类似于:
def xml = '''<xml>
<query operation="create">
This is q1
</query>
<query operation="q2">
This is q2
</query>
<query operation="create">
This is q3
</query>
</xml>'''
然后您应该能够使用findAll
将xml限制为仅感兴趣的节点,然后collect
建立您的对象列表,如下所示:
def queryxml = new XmlSlurper().parseText( xml )
List<MyQuery> query = queryxml.query.findAll { node -> // Filter the nodes
node.@operation.text() == 'create'
}.collect { node -> // For each matching node, create a class
new MyQuery( node.text().trim() )
}
println query
打印出来:
[MyQuery(This is q1), MyQuery(This is q3)]
PS:groovy.transform.Canonical
注释is explained here