leere XML nodes als Leerstring und nicht leeres Object
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
auslese
code
datum
element
ergebnis
http
info
item
leer objekte
leere objekte
leeren elementen
manual
ressource
sauberes array
status
url
vorhandenen array
zweite frage
-
Hallo
ich habe eine Datei mit XML-Daten
in der u.a. auch "leere" Elemente enthalten sind, hier BSP <info></info> im zweiten item
<?xml version="1.0" encoding="iso-8859-1"?> <results> <item> <name>Donald</name> <info>Blabla Bla blablabla</info> <status>1</status> </item> <item> <name>Mickey</name> <info></info> <status>1</status> </item> </results>
Wen ich die Daten auslese, bekomme ich bei "leeren" Elementen aber keinen "Leertring"
sondern ein leeres Object, auch LIBXML_NOBLANKS bringt nichts, es bleibt als Object ?!
$xml_file = 'meinedaten.xml'; $res_data = simplexml_load_file($xml_file, null, LIBXML_NOBLANKS); print "<pre>\n"; print_r($res_data); print "</pre>\n";
Als Ergebnis / Ausgabe bekomme ich:
SimpleXMLElement Object ( [item] => Array ( [0] => SimpleXMLElement Object ( [name] => Donald [info] => Blabla Bla blablabla [status] => 1 ) [1] => SimpleXMLElement Object ( [name] => Mickey [info] => SimpleXMLElement Object ( ) [status] => 1 ) ) )
Wie bekomme ich es hin, dass bei leeren Elementen wie <info></info> aus XML
im Ergebnis dann auch ein "Leerstring" ankommt, und nicht ein leeres Object ?
ok, ich könnte das Ergebnis mit foreach durchgehen,
und dabei leere Objekte in Leerstrings umwandeln,
$i=0; $ok_data = array(); $i=0; foreach($res_data->item as $items) { foreach($items as $key => $val) { $ok_data[$i][$key] = (string)$val; } $i++; }
damit bekomme ich dann ein neues "sauberes" Array $ok_data ohne Leer-Objekte
aber geht es nicht direkt beim Auslesen, denn wenn die XML bischen umfangreicher ist,
dann verbraucht das "nochmal mit foreach durchgehen" schon fast zuviele Ressourcen
und noch eine zweite Frage:
warum bekomme ich bei Ausgabe
print "<pre>\n"; print_r($res_data->item); print "</pre>\n";
nur das erste Array-Element aus item ??
da [item] ja ein Array ist, dann sollte doch hier das Array auch ausgegeben werden?
aber es kommt nur das erste Array-Element, und dann auch noch als Objekt ???
SimpleXMLElement Object ( [name] => Donald [info] => Blabla Bla blablabla [status] => 1 )
häää? $res_data->item ist doch ein Array ?? warum wird es nicht auch so ausgegeben
aber wenn ich foreach($res_data->item as $items) { ... } mache,
dann werden alle vorhandenen Array-Elemente durchlaufen ?!
wo ist da die Logik ? ... warum mit print_r() kein Zugriff auf das Array aber mit foreach() klappts ?
??? .... kann mir das bitte mal jemand erklären ? ... ist für mich grad total unlogisch ...
Danke
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo.
Versuche mal $res_data->item[1]->info ausgeben.
Sollte eigentlich leer sein. ;)
Bezüglich der Verständnisfrage:
Also SimpleXML verwendet Iteratoren und das ArrayAccess-Interface. Damit kann das SimpleXMLElement als Array behandelt und uA mit foreach iteriert werden.
Näheres dazu in der Dokumentation:
http://at2.php.net/manual/de/class.iterator.php
http://at2.php.net/manual/de/class.arrayaccess.php
Beitrag zuletzt geändert: 9.7.2012 1:02:44 von philippkern -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage