xmlstarlet sel没有正确显示后续行

时间:2014-07-10 13:34:58

标签: xmlstarlet

此示例显示了输出文件的更大t

xmlstarlet fo jira-output.xml | egrep 'hours|username|worklog|work_date' | egrep -v 'external|time' | head -20

给我大概这个:

#<worklogs date_from="2014-06-01 00:00:00" date_to="2014-06-30 23:59:59" number_of_worklogs="222" format="xml" diffOnly="false" errorsOnly="false" validOnly="false" addBillingInfo="false" addIssueSummary="false" addIssueDescription="false" duration_ms="106" headerOnly="false" userName="" addIssueDetails="false" addParentIssue="false" addUserDetails="false" addWorklogDetails="false" billingKey="" issueKey="" projectKey="">
#  <worklog>
#    <worklog_id>15650</worklog_id>
#    <hours>0.11666667</hours>
#    <work_date>2014-06-07</work_date>
#    <username>cadalso</username>
#  </worklog>
#  <worklog>
#    <worklog_id>15653</worklog_id>
#    <hours>0.2</hours>
#    <work_date>2014-06-07</work_date>
#    <username>cadalso</username>
#  </worklog>
#  <worklog>
#    <worklog_id>15941</worklog_id>
#    <hours>4.0</hours>
#    <work_date>2014-06-17</work_date>
#    <username>mrjcleaver</username>
#  </worklog>
#  <worklog>
#</worklogs>

这很好地执行,总计

xmlstarlet sel -T -t -v "sum(worklogs/worklog/hours)" --nl jira-output.xml

这个总数是不同的,但仅仅因为XML文件中有更多行

4.31666667

但是以下

xmlstarlet sel -T -t -m /worklogs/worklog/worklog_id -v "concat('|',/worklogs/worklog/staff_id,' | ', /worklogs/worklog/worklog_id,' | ',/worklogs/worklog/work_date,' | ',/worklogs/worklog/hours,' |')" --nl jira-output.xml

节目:

#| cadalso | 15650 | 2014-06-07 | 0.11666667 |
#| cadalso | 15650 | 2014-06-07 | 0.11666667 |
#| cadalso | 15650 | 2014-06-07 | 0.11666667 |
#... one for each row, but with the wrong values

而我想要的是:

#| cadalso | 15650 | 2014-06-07 | 0.11666667 |
#| cadalso | 15653 | 2014-06-07 | 0.2 |
#| mrjcleaver | 15941 | 2014-06-17 | 4.0 |

我做错了什么? 谢谢,M。

1 个答案:

答案 0 :(得分:1)

非常感谢npostavs,答案是:

xmlstarlet sel -T -t -m /worklogs/worklog -v "concat('|',staff_id,' | ', worklog_id,' | ',work_date,' | ',hours,' |')" --nl jira-output.xml