如何使用javascript、php、shell脚本从xml subversion日志文件中获取每天的提交次数?
让XML Subversion提交日志:如何使用javascript、php、shell脚本从xml subversion日志文件中获取每天的提交次数?,php,javascript,svn,shell,xml-parsing,Php,Javascript,Svn,Shell,Xml Parsing,让XML Subversion提交日志: <?xml version="1.0"?> <log> <logentry revision="2"> <author>20070299</author> <date>2012-06-06T05:23:21.999470Z</date> <msg>add part</msg> </logentry> <logentry
<?xml version="1.0"?>
<log>
<logentry
revision="2">
<author>20070299</author>
<date>2012-06-06T05:23:21.999470Z</date>
<msg>add part</msg>
</logentry>
<logentry
revision="1">
<author>20070299</author>
<date>2012-05-22T08:35:55.663875Z</date>
<msg></msg>
</logentry>
</log>
有解决办法吗
我咨询了这个
但是它不工作,无结果无错误日志(apache,php),我不知道如何将$number[]从php代码发送到javascript代码您可以使用XPath:
$ xmllint --shell foo.xml
/ > cat //log/*[@revision]/@revision
-------
revision="2"
-------
revision="1"
/ > cat //log/*[@revision]/date/text()
-------
2012-06-06T05:23:21.999470Z
-------
2012-05-22T08:35:55.663875Z
/ >
这是在一个shell中,但是您可以使用您喜欢的任何语言来迭代XPath表达式
如果这里有人知道如何告诉XPath只获取
revision=“2”
中的数字,请告诉我们=)我知道您要求的是Linux解决方案,但由于您没有提供任何解决方案,这里有一种方法可以通过PowerShell实现您的目标(因此仅限Windows)。也许通过介绍这个算法,另一个贡献者可以为您将它映射到Linux shell命令
([xml](svn log -v --xml)).log.logentry |
Select-Object -Property `
Author, `
@{n='Revision'; e={([int]$_.Revision)}}, `
@{n='Date'; e={Get-Date $_.Date }}, `
Paths |
Group-Object {$_.Date.ToString("yyyy-MM-dd")} |
Sort-Object name -Descending |
Select-Object @{n='Date'; e={$_.Name}}, Count |
Format-Table -AutoSize
即使不熟练使用PowerShell,您也可能会猜测代码在做什么,但以下是关键点的摘要:
- 第一行通过所有日志/日志条目节点设置隐式循环
- 第一个
语句(5行)提取XML元素和属性,将它们转换为PowerShell对象的字段;修订版和日期被转换成适当的类型,使它们比字符串数据更有用selectobject
语句将现在的true date对象转换为适合排序的格式Group Object
- 第二个
语句只是将默认组名(name和count)修改为更相关的名称(date和count)李>selectobject
- 最后的
使生成的列大小紧凑格式表
Date Count
---- -----
2012-06-29 4
2012-06-28 6
2012-06-27 8
2012-06-26 16
2012-06-25 1
2012-06-24 1
2012-06-22 5
2012-06-21 8
2012-06-20 8
Date Count
---- -----
2012-06-29 4
2012-06-28 6
2012-06-27 8
2012-06-26 16
2012-06-25 1
2012-06-24 1
2012-06-22 5
2012-06-21 8
2012-06-20 8