Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript、php、shell脚本从xml subversion日志文件中获取每天的提交次数?_Php_Javascript_Svn_Shell_Xml Parsing - Fatal编程技术网

如何使用javascript、php、shell脚本从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 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
   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,您也可能会猜测代码在做什么,但以下是关键点的摘要:

  • 第一行通过所有日志/日志条目节点设置隐式循环
  • 第一个
    selectobject
    语句(5行)提取XML元素和属性,将它们转换为PowerShell对象的字段;修订版和日期被转换成适当的类型,使它们比字符串数据更有用
  • Group Object
    语句将现在的true date对象转换为适合排序的格式
  • 第二个
    selectobject
    语句只是将默认组名(name和count)修改为更相关的名称(date和count)
  • 最后的
    格式表
    使生成的列大小紧凑
以下是我的系统输出的一部分:

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