使用xmlstarlet从svn xml输出中解析出修订版和文件信息

时间:2014-09-25 19:47:23

标签: xml svn xmlstarlet

给出svn的以下xml输出(通过svn log --xml):

<?xml version="1.0"?>
<log>
  <logentry revision="111802">
    <author>author1</author>
    <date>2014-09-24T17:48:11.447209Z</date>
    <paths>
      <path kind="file" action="A">/project/trunk/subdir/TransactionInfo.java</path>
      <path kind="file" action="A">/project/trunk/subdir/Validation.java</path>
    </paths>
    <msg>added the start to the new Validation tool </msg>
  </logentry>
  <logentry revision="111801">
    <author>author2</author>
    <date>2014-09-24T17:32:51.129605Z</date>
    <paths>
      <path kind="file" action="A">/project/dispatcher/branches/EUROPA/docs/somefile.txt</path>
      <path kind="file" action="A">/project/dispatcher/branches/EUROPA/docs/plans.txt</path>
    </paths>
    <msg>add plan steps doc and jobs spreadsheet</msg>
  </logentry>
</log>

我正在尝试生成这样的输出。请注意正确的2个文件列在正确的修订版本下。

111802 | author1 | 2014-09-24T17:48:11.447209Z | added the start to the new Validation tool
    /project/trunk/subdir/TransactionInfo.java
    /project/trunk/subdir/Validation.java

111801 | author2 | 2014-09-24T17:32:51.129605Z | add plan steps doc and jobs spreadsheet
    /project/dispatcher/branches/EUROPA/docs/somefile.txt
    /project/dispatcher/branches/EUROPA/docs/plans.txt

我使用以下命令,但我从两个版本中获取所有文件。我相信我的错误在于第二个-m参数?

xmlstarlet sel -T -t -m /log/logentry -v "concat(@revision,' | ',author,' | ',date,' | ',msg)" -n -m /log/logentry/paths -v "path" -n svnoutput.xml

111802 | author1 | 2014-09-24T17:48:11.447209Z | added the start to the new Validation tool
/project/trunk/subdir/TransactionInfo.java
/project/trunk/subdir/Validation.java
/project/dispatcher/branches/EUROPA/docs/somefile.txt
/project/dispatcher/branches/EUROPA/docs/plans.txt
111801 | author2 | 2014-09-24T17:32:51.129605Z | add plan steps doc and jobs spreadsheet
/project/trunk/subdir/TransactionInfo.java
/project/trunk/subdir/Validation.java
/project/dispatcher/branches/EUROPA/docs/somefile.txt
/project/dispatcher/branches/EUROPA/docs/plans.txt

作为旁注,我想分享,这会产生一个我发现非常有用的新摘要:

xmlstarlet sel -T -t -m /log/logentry -v "concat(@revision,' | ',author,' | ',date,' | ',msg)" -n svnoutput.xml

111802 | author1 | 2014-09-24T17:48:11.447209Z | added the start to the new Validation tool
111801 | author2 | 2014-09-24T17:32:51.129605Z | add plan steps doc and jobs spreadsheet

1 个答案:

答案 0 :(得分:1)

只需删除额外的-m并将第二个值更改为paths/path

xmlstarlet sel -T -t -m /log/logentry 
                     -v "concat(@revision,' | ',author,' | ',date,' | ',msg)" 
                     -n 
                     -v "paths/path" 
                     -n svnoutput.xml