2010-08-27 44 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