在ColdFusion中解析文件夹中的日志文件

时间:2010-05-18 13:32:48

标签: html xml coldfusion

问题是有一个文件夹./log/包含如下文件:

jan2010.xml, feb2010.xml, mar2010.xml, jan2009.xml, feb2009.xml, mar2009.xml ...

每个xml文件都希望:

<root><record name="bob" spend="20"></record>...(more records)</root>

我想编写一段只需解析这些xml文件的ColdFusion代码(log.cfm)。对于前端,我会让用户选择一年,然后点击提交按钮。该年度的所有内容将逐月显示在单独的表格中。每张桌子都显示了每个人的总花费。像:

person   cost
bob      200
mike     300
Total    500

感谢。

3 个答案:

答案 0 :(得分:2)

简短的回答是,如果您的XML格式正确,您可以使用XMLParse()函数将XML转换为CF数据对象。

Sergii指出XMLParse cna采用路径,因此您可以直接将文件读入其中并将结果分配给变量。

数据应该看起来像一个结构数组。在CF数据对象上使用CFDUMP进行查看并帮助您解决问题。

答案 1 :(得分:0)

如果您使用的是Windows,我强烈建议您查看Microsoft的“Log Parser”。它基本上为所有日志文件提供类似SQL的查询接口。有一个名为“Log Parser Lizard”的应用程序,它提供了一个用于测试“查询”的GUI,然后您可以使用您提出的查询来执行logparser。

不确定Linux是否有等价物。

如果您在Windows上并且有兴趣了解更多信息,请与我联系。我把它挂钩到一个ANT任务,每天晚上下载日志文件,解析它们,生成报告等等。它工作得非常好。

答案 2 :(得分:0)

具体例子:

<CFSET year = 2011 />
<CFDIRECTORY directory="#expandpath("log")#" action="list" sort="name" name="logfiles" filter="*#year#.xml" />
<CFOUTPUT query="logfiles">
  <CFSET singlelogfile = xmlparse(directory & "/" & name) />
  <CFSET records = XmlSearch(singlelogfile, "//record") />
  <table>
    <tr><td colspan="2">Month: #left(logfiles.name,3)#</td></tr>
    <CFLOOP array="#records#" index="record">
      <tr><td>#record.XmlAttributes.name#</td><td>#record.XmlAttributes.spend#</td></tr>
    </CFLOOP>
  </table>
</CFOUTPUT>

当然,您需要更改年份来自FORM-Scope,为每个人总结多个记录,并且可能(如果您可以控制)将文件名从日志更改为01-2011,02-2011,03 -2011,... 12-2011这样他们就可以直接排序了。