2010-08-27 25 views
0

我有下面的XML文件:使用PHP来改变XML文件

<graph caption="Share Data Wave" subcaption="For Person's Name" xAxisName="Time" yAxisMinValue="-0.025" yAxisName="Voltage" decimalPrecision="5" formatNumberScale="0" numberPrefix="" showNames="1" showValues="0" showAlternateHGridColor="1" AlternateHGridColor="ff5904" divLineColor="ff5904" divLineAlpha="20" alternateHGridAlpha="5"> 
    <set name="2010-08-27 12:00:20.636" value="25.020000" hoverText = "The difference from last value: 0" ></set> 
    <set name="2010-08-27 12:01:19.473" value="15.000000" hoverText = "The difference from last value: -10.02" ></set> 
    <set name="2010-08-27 12:01:24.494" value="15.020000" hoverText = "The difference from last value: 0.0199999999999996" ></set> 
    <set name="2010-08-27 12:01:44.188" value="18.250000" hoverText = "The difference from last value: 3.23" ></set> 
    <set name="2010-08-27 12:02:11.851" value="18.540000" hoverText = "The difference from last value: 0.289999999999999" ></set> 
    <set name="2010-08-27 12:02:47.109" value="16.520000" hoverText = "The difference from last value: -2.02" ></set> 
    <set name="2010-08-27 12:03:01.199" value="17.500000" hoverText = "The difference from last value: 0.98" ></set> 
    <set name="2010-08-27 12:03:03.030" value="25.020000" hoverText = "The difference from last value: 7.52" ></set> 
    <set name="2010-08-27 12:03:40.570" value="30.000000" hoverText = "The difference from last value: 4.98" ></set> 
    <set name="2010-08-27 12:04:27.490" value="32.250000" hoverText = "The difference from last value: 2.25" ></set> 
    <set name="2010-08-27 12:05:03.738" value="26.050000" hoverText = "The difference from last value: -6.2" ></set> 
    <set name="2010-08-27 12:05:14.511" value="18.540000" hoverText = "The difference from last value: -7.51" ></set> 
    <set name="2010-08-27 12:06:09.728" value="16.520000" hoverText = "The difference from last value: -2.02" ></set> 
    <set name="2010-08-27 12:06:58.329" value="17.500000" hoverText = "The difference from last value: 0.98" ></set> 
</graph> 

是否有PHP的方式来改变这个文件只是显示一些数据点2010-08-27 12间说: 02:11.851(开始时间)至2010-08-27 12:05:03.738(结束时间),并向用户提供开始时间的下拉菜单和结束时间的下拉菜单,同时保持顶部标签和底部标签?

有什么建议吗?

问候,

安东尼

+0

确定这是可能的。你的问题到底是什么?你卡在哪里? – 2010-08-27 08:52:08

+0

SimpleXML或DomDocument可以帮助你在这里 – 2010-08-27 08:58:22

+0

@Pekka编程能力是关于我卡在哪里的最简单的答案。我一直在做大量的阅读,但它导致信息过载,我意识到这个文档不是正确的XML。 – 2010-08-27 09:30:30

回答

0

首先,您应该问问自己,如果您确实想更改文件。这听起来像你实际上想要使用这个文件作为输入,并使用PHP来生成一个HTML文件与你的下拉菜单。

我想沃尔克的权利,你可能想使用XSLT。基本上它是一种将XML文档转换为其他类型的样式表。但你也可以用它来执行测试,这是你如何选择你想要的日期范围。

以下是关于XSLT的基本教程:http://www.w3schools.com/xsl/xsl_transformation.asp(但它不会告诉您需要知道选择日期范围的内容)。

你的XSL文件看起来是这样的(我认为 - 这是未测试):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:php="http://php.net/xsl"> 
<xsl:output method="html" encoding="utf-8" indent="yes"/> 
<xsl:template match="/graph"> 
    <html><body> 
    <select> 
    <xsl:for-each select="set"> 
      <xsl:if test="php:function('testDate',string(@name))"/> 
     <option value=""> 
     <xsl:value-of select="php:function('formatDate',string(@name))"/> 
     </option> 
     </xsl:if> 
    </xsl:for-each> 
    </select> 
    </body></html> 
</xsl:template> 
</xsl:stylesheet> 

在这种情况下,你会写功能来测试日对是否在设定的范围相匹配(testDate),并以您想要的方式格式化日期(formateDate;请参阅strtotime()和date()函数)。此外,您还需要确定提交表单时要传回的值。然后按照这个例子让PHP使用这个XSL文件来解析XML文件: http://docs.php.net/manual/en/xsltprocessor.registerphpfunctions.php

+0

目前,FusionCharts Free使用xml文件构建Flash图形。我希望能够更改xml文件,以便可以生成新的闪光图(“下钻”效果,就像放大特定时间段一样)。下拉菜单的目的是让用户选择时间段。 – 2010-08-27 20:30:28

+0

哦,我明白了。看起来你想用JavaScript来做到这一点。而不是编辑XML文件并重新加载页面,您可以动态传递数据。并且有一个FusionCharts jQuery插件: http://www.fusioncharts.com/jquery/ – bjudson 2010-08-27 20:46:43

+0

这证明存在问题。我已经下载了该文件,但无法使其正常工作。 – 2010-08-30 10:12:37