2014-09-25 56 views
1

考虑从SVN XML输出以下(通过svn日志--xml)信息:使用xmlstarlet解析出修订和文件从SVN 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

刚刚摆脱的额外-m和你的第二个值更改为paths/path

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

很好,谢谢! – patterson7019 2014-09-26 15:21:05