【发布时间】:2014-02-10 06:43:00
【问题描述】:
我能够使用 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”, 然后我想收集和合并与小时 work_date、work_date_time、username、activity_name、work_description、parent_key、reporter 标签相关的值,然后以它与其他标签的生成顺序相同的顺序输出不同的 issue_key 值。
很抱歉成为 Groovy 和 XmlSlurper 的新手。但是任何人都可以让我知道如何去做。另外,下面是我从 XML 中获取属性的 Groovy 代码。
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 属性获取这些值。
【问题讨论】:
标签: xml groovy xml-parsing xmlslurper