Das unten stehende Script liefert in IPS 2.5 Beta ein anderes Ergebnis zurück als unter 2.4. Ich suche jetzt schon zwei Tage nach der Ursache , aber ich habe null Ideen. Hat jemand einen Tip ?
Einige Array Werte sind unter 2.5 leer, in 2.4 sind dort Werte eingetragen.
//--- XML 2 Array (php.net Copy&Paste)
function convert_xml2array(&$result,$root,$rootname='root'){
$n=count($root->children());
if ($n>0){
/**
* start of the correction
*/
if (!isset($result[$rootname]['@attributes'])){
$result[$rootname]['@attributes']=array();
foreach ($root->attributes() as $atr=>$value){
$result[$rootname]['@attributes'][$atr]=(string)$value;
}
}
/**
* end of the correction
*/
foreach ($root->children() as $child){
$name=$child->getName();
convert_xml2array($result[$rootname][],$child,$name);
}
} else {
$result[$rootname]= (array) $root;
if (!isset($result[$rootname]['@attributes'])){
$result[$rootname]['@attributes']=array();
}
}
}
Der Beitrag von Brownson (verlinkte Threads) liest sich für mich so, dass Dein Code der Funktion schon richtig ist, aber der Funktionsaufruf zusätzlich ohne das „&“ erfolgen müsste… !?
Erstmal danke für die schnellen Antworten. Aber leider hat bis jetzt nichts geholfen.
@wgreipl - deinen Link kann ich leider nicht öffnen !
@bengie - ohne das „&“ gibt es immer eine Fehlermeldung
@Brownson - das Ergebnis deiner Änderungen sind identisch mit dem original Script.
Generell liefert das Script ja Daten zurück, nur leider sind einzelne Werte leer. Ich bin extra noch mal auf IPS2.4 zurückgegangen um mir das Ergebnis dort anzuschauen. Dort sind alle Werte vorhanden.
hier wird der eigentliche Wert des XML Knotens nicht richtig in ein Array umgewandelt. Wie eine korrekte Umwandlung funktionert bin ich mir auch nicht sicher (XML ist nicht wirklich mein Gebiet), aber folgender Code scheint zu funktionieren:
$result[$rootname]= (array)(string)$root;
oder
$result[$rootname]= array("$root");
function convert_xml2array(&$result,$root,$rootname='root'){
$n=count($root->children());
if ($n>0){
/**
* start of the correction
*/
if (!isset($result[$rootname]['@attributes'])){
$result[$rootname]['@attributes']=array();
foreach ($root->attributes() as $atr=>$value){
$result[$rootname]['@attributes'][$atr]=(string)$value;
}
}
/**
* end of the correction
*/
foreach ($root->children() as $child){
$name=$child->getName();
convert_xml2array($result[$rootname][],$child,$name);
}
} else {
$result[$rootname]= (array)(string)$root;
if (!isset($result[$rootname]['@attributes'])){
$result[$rootname]['@attributes']=array();
}
}
}