我可以使用Groovy和XmlSlurper通过HTTP URL解析XML,并输出与标签关联的值。下面是生成的示例XML页面。
<worklog>
<worklog_id>10100</worklog_id>
<issue_key>TST-3</issue_key>
<hours>2.0</hours>
<work_date>2014-01-01</work_date>
<work_date_time>2014-01-01 00:00:00</work_date_time>
<username>admin</username>
<reporter>admin</reporter>
</worklog>
<worklog>
<worklog_id>10200</worklog_id>
<issue_key>TST-3</issue_key>
<work_date>2014-01-02</work_date>
<work_date_time>2014-01-02 00:00:00</work_date_time>
<username>admin</username>
<reporter>admin</reporter>
</worklog>
<worklog>
<worklog_id>10201</worklog_id>
<issue_key>TST-3</issue_key>
<hours>0.25</hours>
<work_date>2014-01-02</work_date>
<work_date_time>2014-01-02 10:33:00</work_date_time>
<username>admin</username>
<reporter>admin</reporter>
</worklog>
<worklog>
<worklog_id>10400</worklog_id>
<issue_key>TST-3</issue_key>
<hours>2.0</hours>
<work_date>2014-01-07</work_date>
<work_date_time>2014-01-07 12:03:00</work_date_time>
<username>admin</username>
<reporter>admin</reporter>
</worklog>
<worklog>
<worklog_id>10202</worklog_id>
<issue_key>TST-4</issue_key>
<hours>1.0</hours>
<work_date>2014-01-02</work_date>
<work_date_time>2014-01-02 15:52:00</work_date_time>
<username>admin</username>
<reporter>admin</reporter>
</worklog>
但是,在我的XML中,我需要遍历我的XML并寻找具有相同值的issue_key标记。如果有多个具有相同值的issue_key标记(如此处的“ TST-3”中所示),那么我想为该单个issue_key标记收集并合并与小时work_date,work_date_time,用户名,activity_name,work_description,parent_key,reporter标记相关的值然后将其以与生成具有相同issue_key值的其他标签相同的顺序输出。
很抱歉,对于Groovy和XmlSlurper来说是一个完全菜鸟。但是谁能让我知道如何去做。另外,下面是我的Groovy代码,用于从XML获取属性。
def worklogList = new ArrayList<Worklog>()
def wklog
def worklogs = new XmlSlurper().parse(new File("C:\\xml-worklog\\worklog.xml"))
worklogs.worklog.each {node ->
wklog = new Worklog();
wklog.work_date = node.work_date
wklog.work_date_time = node.work_date_time
wklog.issue_key = node.issue_key
wklog.hours = node.hours
wklog.username = node.username
wklog.reporter = node.reporter
worklogList.add(wklog)
}
worklogList.each {wklogT -> println(wklogT)}
}
class Worklog
{
String issue_key
String hours
String work_date
String work_date_time
String username
String activity_name
String work_descripton
String reporter
@Override
public String toString()
{
return "Issue Key: ${issue_key} \t Hours: ${hours} \t Work Date: ${work_date} \t Work Date Time: ${work_date_time} \t Username: ${username} \t Reporter: ${reporter} \t Activity Name: ${activity_name} \t Description: ${work_descripton}"
}
}
特定发行密钥的预期o / p,假设“ TST-3”为-
工作时间| 工作日期 工作日期时间| 用户名| 记者
2.0 | 2014-01-01 | 2014-01-01 00:00:00 | 管理员| 管理员|
| 2014-01-02 | 2014-01-02 00:00:00 | admin | admin |
0.25 | 2014-01-02 | 2014-01-02 10:33:00 | 管理员| 管理员|
2.0 | 2014-01-07 | 2014-01-02 12:03:00 | 管理员| 管理员|
如何为每个issue_key属性在有序列表对象中获取这些值。
作为解决问题的一种快速且可中继的方法,建议您创建一个工厂方法,该方法将Worklog
通过发布密钥为您初始化实例。
在这种情况下,您只需做很小的更改就可以处理xml。下面是处理工作日志的代码草案。
def worklogs = [:]
def createWorklog(String id) {
if (!worklogs.containsKey(id))
worklogs[id] = new Worklog()
return worklogs[id]
}
worklogs.worklog.each {node ->
wklog = createWorklog(node.issue_key); // creates, or give created, and save it to list.
// It don't know, what do you want to do with different dates or usernames.
// If you want, you can have a list of them, and add value to list here, or consolidate whole change structures to list.
wklog.hours += node.hours // aggregate hours.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句