SimpleXMLElement Fehler

Ich weis nicht ob das ein Code Fehler ist oder eventuell an IPS 4 liegt.

Ich möchte ein XML auslesen mit dem Code


$xmlFile =  IPS_GetKernelDir().'webfront/user/neo/devices.xml';

if (file_exists($xmlFile))
 {
   echo "Datei wurde gefunden";

} else {
    exit("Datei $xmlFile kann nicht geöffnet werden.");
}



$xml = new SimpleXMLElement($xmlFile);
foreach($xml->xpath("//device[@type='LEDS']") as $device)
{
        echo ($device['address'])."<br>";
}

Wenn ich statt aus der File zu lesen das XML innerhalb des Scripts als Variable habe und diese an SimpleXMLElement übergebe, läuft das Script sauber ab und gibt mir den Inhalt der Nodes aus die ich haben will.

Sobald ich aber das XML aus der Datei hole bekomme ich folgende Fehlermeldung:


Datei wurde gefunden
Warning:  SimpleXMLElement::__construct(): Entity: line 1: parser error : Start tag expected, '<' not found in /usr/share/symcon/scripts/19678.ips.php on line 61

Warning:  SimpleXMLElement::__construct(): /usr/share/symcon/webfront/user/neo/devices.xml in /usr/share/symcon/scripts/19678.ips.php on line 61

Warning:  SimpleXMLElement::__construct(): ^ in /usr/share/symcon/scripts/19678.ips.php on line 61

Fatal error:  Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /usr/share/symcon/scripts/19678.ips.php:61
Stack trace:
#0 /usr/share/symcon/scripts/19678.ips.php(61): SimpleXMLElement->__construct('/usr/share/symc...')
#1 {main}
  thrown in /usr/share/symcon/scripts/19678.ips.php on line 61
Abort Processing during Fatal-Error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /usr/share/symcon/scripts/19678.ips.php:61
Stack trace:
#0 /usr/share/symcon/scripts/19678.ips.php(61): SimpleXMLElement->__construct('/usr/share/symc...')
#1 {main}
  thrown
   Error in Script /usr/share/symcon/scripts/19678.ips.php on Line 61

Zeile 61 ist


$xml = new SimpleXMLElement($xmlFile);

Ist das ein Bug oder ein Fehler im Skript?

Sieht eher nach einem Fehler in deinem Skript aus :slight_smile:

paresy

Hm ok, ist zumindest beruhigend das es nicht IPS ist. Weist Du auch was der Fehler im Skript sein könnte? Das XML File ist definitiv valide.

Also wenn ich


$file = IPS_GetKernelDir().'webfront/user/neo/devices.xml';
if (file_exists($file))
 {
   echo "Datei wurde gefunden";
   $xmlFile =  simplexml_load_file($file);
   print_r($xmlFile);

	
   
} else {
    exit("Datei $xmlFile kann nicht geöffnet werden.");
}

Bekomme ich Output-Buffer exceeds 1024kb. Operation halted.

Kann das eventuell damit zusammenhängen und passiert das nur bei print_r ?

Probier mal das:


...

$xml = new SimpleXMLElement(file_get_contents($xmlFile)); 

....

paresy

Sieht nach der üblichen Fehlermeldung aus wenn die Datei nicht UTF8 kodiert ist.
Hast du das mal geprüft ?
Wie erstellt du die XML-Datei ?
Michael

:slight_smile: Das wars.

ich hatte es mit


$xml =  simplexml_load_file($file);
$xml = new SimpleXMLElement($xml);

probiert, das gibt den Fehler.

Mit


$xml = file_get_contents($file);
$xml = new SimpleXMLElement($xml);

funktioniert es. Danke

Mit file_get_contents geht es die Datei ist <?xml version=„1.0“ encoding=„UTF-8“ ?>

Ja das muss da auch stehen, hat aber nix dem den eigentlichen encoding der Datei zu tun. Die kann ja dennoch falsch sein.
Aber wenn es nun läuft, ist ja erledigt.
Michael