Hallo zusammen,
ich beschäftige mich gerade mal wieder mit dem Parsen von XML Files in PHP. Nachstehender Code funktioniert auch soweit ganz gut, nur habe ich trotzdem eine "VALIDE" Ausgabe wenn ich z.B. das erste <row> Tag in <row2> abändere - PHP Warning wird geworfen. Habe ich hier einen Denkfehler im XML Schema oder bekommt die Überprüfung des Parser das nicht gebacken?
Der Code:
XML Dummy FILE:
ich beschäftige mich gerade mal wieder mit dem Parsen von XML Files in PHP. Nachstehender Code funktioniert auch soweit ganz gut, nur habe ich trotzdem eine "VALIDE" Ausgabe wenn ich z.B. das erste <row> Tag in <row2> abändere - PHP Warning wird geworfen. Habe ich hier einen Denkfehler im XML Schema oder bekommt die Überprüfung des Parser das nicht gebacken?
Der Code:
XML Dummy FILE:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE datacontainer [
<!ELEMENT datacontainer (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
>
]>
<datacontainer>
<description>
<column col_ref="timestamp" dict_ref="timestamp" data_type="T" unit="" data_size="0" data_precision="1"/>
<column col_ref="serial" dict_ref="serial" data_type="C" unit="" data_size="32" data_precision="1"/>
<column col_ref="temperature" dict_ref="temperature" data_type="I" unit="°C" data_size="1" data_precision="0.1"/>
</description>
<row>
<item key="timestamp" value="2008-01-29 07:50:00" />
<item key="serial" value="4711" />
<item key="temperature" value="2.0" />
</row>
<row>
<item key="timestamp" value="2008-01-29 08:00:00" />
<item key="serial" value="4711" />
<item key="temperature" value="1.0" />
</row>
</datacontainer>
PHP:
$xml = new XMLReader();
$xml->open("FILE.xml");
// DTD laden und während dem Parsen validieren
$xml->setParserProperty(3,true);
while ($xml->read()) {
}
if ( $xml->isValid() ) {
echo "VALIDE";
}
else {
echo "NICHT VALIDE";
}
Zuletzt bearbeitet: