xml-Datei auslesen und in tabelle darstellen
Ich habe eine xml-Datei mit folgendem Inhalt:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sccdata [
<!ELEMENT sccdata (description,row*)>
<!ELEMENT description (column*)>
<!ELEMENT column (#PCDATA)>
<!ATTLIST column
col_ref CDATA #REQUIRED
dict_ref CDATA #IMPLIED
data_type CDATA #IMPLIED
unit CDATA #IMPLIED
data_size CDATA #IMPLIED
data_precision CDATA #IMPLIED
>
<!ELEMENT row (item*)>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item
key CDATA #REQUIRED
value CDATA #IMPLIED
>
]>
<sccdata>
<description>
<column col_ref="timestamp" dict_ref="timestamp" data_type="T" unit="" data_size="4" data_precision="1"/>
<column col_ref="inverter_id" dict_ref="inverter_id" data_type="J" unit="" data_size="4" data_precision="1"/>
<column col_ref="serialnumber" dict_ref="serialnumber" data_type="C" unit="" data_size="32" data_precision="1"/>
<column col_ref="status" dict_ref="status" data_type="J" unit="" data_size="4" data_precision="1"/>
<column col_ref="dc_power" dict_ref="dc_power" data_type="J" unit="W" data_size="4" data_precision="1"/>
<column col_ref="power" dict_ref="power" data_type="J" unit="W" data_size="4" data_precision="1"/>
<column col_ref="day_yield" dict_ref="day_yield" data_type="J" unit="kWh" data_size="4" data_precision="0.001"/>
<column col_ref="temperature" dict_ref="temperature" data_type="J" unit="°C" data_size="4" data_precision="1"/>
<column col_ref="status1" dict_ref="status1" data_type="J" unit="" data_size="4" data_precision="1"/>
<column col_ref="dc1_voltage" dict_ref="dc1_voltage" data_type="J" unit="V" data_size="4" data_precision="0.1"/>
<column col_ref="dc1_current" dict_ref="dc1_current" data_type="J" unit="A" data_size="4" data_precision="0.01"/>
<column col_ref="dc1_power" dict_ref="dc1_power" data_type="J" unit="W" data_size="4" data_precision="1"/>
<column col_ref="ac1_voltage" dict_ref="ac1_voltage" data_type="J" unit="V" data_size="4" data_precision="0.1"/>
<column col_ref="ac1_current" dict_ref="ac1_current" data_type="J" unit="A" data_size="4" data_precision="0.01"/>
<column col_ref="ac1_power" dict_ref="ac1_power" data_type="J" unit="W" data_size="4" data_precision="1"/>
<column col_ref="status2" dict_ref="status2" data_type="J" unit="" data_size="4" data_precision="1"/>
<column col_ref="dc2_voltage" dict_ref="dc2_voltage" data_type="J" unit="V" data_size="4" data_precision="0.1"/>
<column col_ref="dc2_current" dict_ref="dc2_current" data_type="J" unit="A" data_size="4" data_precision="0.01"/>
<column col_ref="dc2_power" dict_ref="dc2_power" data_type="J" unit="W" data_size="4" data_precision="1"/>
<column col_ref="ac2_voltage" dict_ref="ac2_voltage" data_type="J" unit="V" data_size="4" data_precision="0.1"/>
<column col_ref="ac2_current" dict_ref="ac2_current" data_type="J" unit="A" data_size="4" data_precision="0.01"/>
<column col_ref="ac2_power" dict_ref="ac2_power" data_type="J" unit="W" data_size="4" data_precision="1"/>
<column col_ref="status3" dict_ref="status3" data_type="J" unit="" data_size="4" data_precision="1"/>
<column col_ref="dc3_voltage" dict_ref="dc3_voltage" data_type="J" unit="V" data_size="4" data_precision="0.1"/>
<column col_ref="dc3_current" dict_ref="dc3_current" data_type="J" unit="A" data_size="4" data_precision="0.01"/>
<column col_ref="dc3_power" dict_ref="dc3_power" data_type="J" unit="W" data_size="4" data_precision="1"/>
<column col_ref="ac3_voltage" dict_ref="ac3_voltage" data_type="J" unit="V" data_size="4" data_precision="0.1"/>
<column col_ref="ac3_current" dict_ref="ac3_current" data_type="J" unit="A" data_size="4" data_precision="0.01"/>
<column col_ref="ac3_power" dict_ref="ac3_power" data_type="J" unit="W" data_size="4" data_precision="1"/>
</description>
<row>
<item key="timestamp" value="2008-07-17 12:00:00" />
<item key="inverter_id" value="1" />
<item key="serialnumber" value="1" />
<item key="status" value="3" />
<item key="dc_power" value="94" />
<item key="power" value="54" />
<item key="day_yield" value="4.891" />
<item key="temperature" value="23" />
<item key="status1" value="3" />
<item key="dc1_voltage" value="462.1" />
<item key="dc1_current" value="0.21" />
<item key="dc1_power" value="94" />
<item key="ac1_voltage" value="231.8" />
<item key="ac1_current" value="0.27" />
<item key="ac1_power" value="54" />
<item key="status2" value="0" />
<item key="dc2_voltage" value="0" />
<item key="dc2_current" value="0" />
<item key="dc2_power" value="0" />
<item key="ac2_voltage" value="0" />
<item key="ac2_current" value="0" />
<item key="ac2_power" value="0" />
<item key="status3" value="0" />
<item key="dc3_voltage" value="0" />
<item key="dc3_current" value="0" />
<item key="dc3_power" value="0" />
<item key="ac3_voltage" value="0" />
<item key="ac3_current" value="0" />
<item key="ac3_power" value="0" />
</row>
Wie man sich denken kann wiederholten sich die Daten nur mit anderen Werten und nem anderen Timestamp.
Meine Frage nun: Kann mir wer helfen diese Datei per php(xsl) auszuwerten und in ner tabelle mit überschriften auszugeben?
Ist wirklich dringend da das Unternehmen in dem ich arbeite diese Daten online stellen will und zwar so schnell wie möglich.
Vielen Dank im vorrau,
R
Antwort schreiben
Antwort 3 von Reavermaster vom 21.07.2020, 13:55 Options
Ja das ist ja alles gut und schön ... ist ja nicht so das ich danach nicht schon selbst gesucht hätte aber das problem ist das bei den meisten xml-dateien die werte so stehen:
<bezeichnung>WERT</bezeichnung>
damit wäre es einfach alles auszulesen ... aber bei mir ist es halt so das das alles so da steht:
<item key="bezeichnung" value="WERT" />
Und ich brauche halt den WERT ... jemand ne idee wie man das verwirklichen könnte?
Antwort 4 von son_quatsch vom 21.07.2020, 14:33 Options
Wenn es dir nur um die Werte geht, hilft dir evt. folgender Code weiter:
<?php
$h1= fopen( 'xml.xml', 'r' ) or die( 'Konnte Datei nicht öffnen' );
$sDatei;
while ( !feof( $h1) ) $sDatei.= fgets( $h1, 4096 );
fclose( $h1 );
preg_match_all( '#key="([^"]+)"[^v]*value="([^"]*)"#i', $sDatei, $aValue );
echo '<table>';
for ( $i1= 0; $i1< count( $aValue[1] ); $i1++ ) echo '<tr>
<td>'. $aValue[1][$i1]. '</td>
<td>'. $aValue[2][$i1]. '</td>
</tr>';
echo '</table>';
?>
Antwort 5 von Reavermaster vom 21.07.2020, 15:22 Options
Ja es geht mit in der Hinsicht um die Werte das ich damit später auch arbeiten will ... es wird halt ne auswertung für ne photovoltaik-anlage auf dem dach der lagerhalle des unternehmens. heißt also auch den gesamtbetrag berechnen hinsichtlich leistung usw.
also wäre gut wenn der das in arrays auseinanderpflücken würde oder sowas in der art ... ein array pro timestamp oder sowas ...
ich habe leider noch zu viel anderes zu tun als das ich mich komplett auf dieses projekt einschießen könnte. deswegen bitte ich ja um eure hilfe :-) .
Schon mal vielen herzlichen dank für die antworten.
Antwort 6 von Reavermaster vom 21.07.2020, 15:37 Options
Ja es geht mit in der Hinsicht um die Werte das ich damit später auch arbeiten will ... es wird halt ne auswertung für ne photovoltaik-anlage auf dem dach der lagerhalle des unternehmens. heißt also auch den gesamtbetrag berechnen hinsichtlich leistung usw.
also wäre gut wenn der das in arrays auseinanderpflücken würde oder sowas in der art ... ein array pro timestamp oder sowas ...
ich habe leider noch zu viel anderes zu tun als das ich mich komplett auf dieses projekt einschießen könnte. deswegen bitte ich ja um eure hilfe :-) .
Schon mal vielen herzlichen dank für die antworten.