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 タグを探す必要があります。ここの「TST-3」のように、同じ値を持つ issue_key タグが複数ある場合、時間の work_date、work_date_time、username、activity_name、work_description、parent_key、reporter タグに関連付けられた値を、この 1 つの issue_key タグに対して収集して統合したいと考えています。そして、異なる 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 属性の順序付きリスト オブジェクトでこれらの値を取得するにはどうすればよいですか。