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

Уверен, что это возможно. О чем именно ваш вопрос? Где вы застряли? –

+0

SimpleXML или DomDocument могут помочь вам здесь –

+0

@Pekka Возможность программирования - самый простой ответ о том, где я застрял. Я много читаю об этом, но это приводит к информационной перегрузке, и я знаю, что документ не является надлежащим XML. –

ответ

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

В настоящее время XML-файл используется FusionCharts Free для построения графика Flash. Я хочу, чтобы иметь возможность изменять файл xml, чтобы можно было создать новый график флэш (эффект «развертки», как будто для увеличения определенного периода времени). Целью выпадающего меню было бы позволить пользователю выбрать период времени. –

+0

О, я вижу. Похоже, вы захотите использовать JavaScript для этого. Вместо того, чтобы редактировать файл XML и перезагружать страницу, вы можете передавать данные динамически. И есть плагин FusionCharts jQuery: http://www.fusioncharts.com/jquery/ – bjudson

+0

Это доказывает проблему. Я загрузил файл, но у меня проблемы с его работой. –

Смежные вопросы