0

拥有 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>

我想要一个按日期和每天在我的网站 php-javascript 上提交的数量分组的数组。类似于这个:

date[0]=2012-05-22
value[0]=1
date[1]=2012-05-23
value[1]=0
...
date[15]=2012-06-06
value[15]=1

有解决办法吗?

我查阅了这个链接

但它不起作用,非结果非错误日志(apache,php),我不知道如何将 $number[] 从 PHP 代码发送到 javascript 代码

4

2 回答 2

0

我意识到您正在寻求 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,您也可以推测代码在做什么,但这里是关键点的摘要:

  • 第一行设置了一个通过所有 log/logentry 节点的隐式循环。
  • 第一Select-Object条语句(5 行)提取 XML 元素和属性,将它们转换为 PowerShell 对象的字段;修订和日期被按摩成适当的类型,使它们比字符串数据更有用。
  • Group-Object语句将现在真正的日期对象转换为适合排序的格式。
  • 第二条Select-Object语句只是将默认组名称(名称和计数)修改为更相关的名称(日期和计数)。
  • 最终Format-Table使生成的列尺寸紧凑。

这是我系统的一部分输出:

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
于 2012-07-03T17:08:21.897 回答
0

你可以玩 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",请告诉我们 =)

于 2012-06-06T09:18:09.517 回答