使用PHP来改变XML文件

时间:2010-08-27 08:48:05

标签: php xml

我有以下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之间的一些数据点(结束)时间)并为用户提供开始时间的下拉菜单和结束时间的下拉菜单,同时保留顶部标签和底部标签?

有什么建议吗?

此致

安东尼

2 个答案:

答案 0 :(得分:0)

这是可能的。例如。通过XSL(T)。许多浏览器甚至可以在客户端执行此操作 请参阅http://www.w3.org/TR/xslthttp://docs.php.net/book.xsl

答案 1 :(得分:0)

首先,您应该问自己是否确实想要更改文件。听起来您实际上想要使用此文件作为输入,并使用PHP通过下拉菜单生成HTML文件。

我认为Volker是正确的,你可能想要使用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