simplexml_load_file und leere XML Elemente
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
bug
code
datum
element
ergebnis
falsche ausgabe
feld
info
item
leere elemente
machen
null
objekt
safe
schleife
status
string
url
-
Hallo
ich möchte Daten aus einer XML Datei in ein Array lesen
aber wenn die XML leere Elemente enthält,
dann macht simplexml_load_file als Wert nicht einen Leerstring
sondern ein leeres Onjekt ??? (EDIT: soll ehissen: Objekt )
auch mit LIBXML_NOBLANKS bleibt es leider so
Beispiel: (EDIT: passend zur Ausgabe mit 3 Elementen)
<?xml version='1.0'?> <root> <item> <title>Name1</title> <info>Info1</info> <status>4</status> </item> <item> <title>Name2</title> <info></info> <status>3</status> </item> <item> <title>Name3</title> <info>Info3</info> <status></status> </item> </root>
diese Datei lese ich mit simplexml_load_file
$xmlfile = 'daten1.xml'; $daten = simplexml_load_file($xmlfile,NULL,LIBXML_NOBLANKS); print "<pre>\n"; print_r($daten); print "</pre>\n";
dann bekomme ich folgende Daten:
SimpleXMLElement Object ( [item] => Array ( [0] => SimpleXMLElement Object ( [title] => Name1 [info] => Info1 [status] => 4 ) [1] => SimpleXMLElement Object ( [title] => Name2 [info] => SimpleXMLElement Object ( ) [status] => 3 ) [2] => SimpleXMLElement Object ( [title] => Name3 [info] => Info3 [status] => SimpleXMLElement Object ( ) ) ) )
also die Elemente, die "leer" sind kommen als leeres Objekt an,
ich hätte da aber gerne einfach einen Lerstring,
und ich dachte LIBXML_NOBLANKS macht das, aber Pustekuchen !!!
schöner fände ich als Ergebnis
SimpleXMLElement Object ( [item] => Array ( [0] => SimpleXMLElement Object ( [title] => Name1 [info] => Info1 [status] => 4 ) [1] => SimpleXMLElement Object ( [title] => Name2 [info] => [status] => 3 ) [2] => SimpleXMLElement Object ( [title] => Name2 [info] => Info3 [status] => ) ) )
also wenn Element "leer" ist, dann auch "nix" (Leerstring) im Ergebnis
Gibt es eine Möglichkeit, wie ich für leere Elemente auch nur einen Leerstring bekomme
oder alternativ wäre ich auch mit 'NULL' als Wert zufrieden ...
.. weil ich will im Item-Array keine weiteren Unter-Objekte
Beitrag zuletzt geändert: 18.3.2012 8:57:46 von sparsuche -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
sparsuche schrieb:
na dann einen kurzen blick mal auf die ausgabe
... dann macht simplexml_load_file als Wert nicht einen Leerstring
sondern ein leeres Onjekt ???
;)<?php // localhost/test/test.php error_reporting(E_ALL | E_STRICT); $xmlfile = 'daten1.xml'; $daten = simplexml_load_file($xmlfile,NULL,LIBXML_NOBLANKS); for($i = 0; $i < count($daten->item); $i++) { foreach($daten->item->$i as $k => $v) { $t = gettype($v); echo "[\$i = $i] - $k (type is $t) ** $v<br />\n"; } } echo "<hr />\n"; $res = print_r($daten, true); exit('<pre>'. $res);
mal ganz abgeshen davon, du hast uns eine falsche ausgabe unterbreitet. du du!
Beitrag zuletzt geändert: 17.3.2012 16:40:08 von hemiolos -
Hallo
ok, also innerhalb Ausgabe-Schleife, schade das es nicht direkt beim einlesen geht
entweder mit print Ausgabe oder (string)$val oder sonst halt mit if (empty($val)) { $val = ''; }
Frage: warum ergeben beide folgende Codes geanu das selbe Ergebnis ?!
foreach ($daten as $items) { foreach ($items as $key=>$val) { print "<br />".$key." --- ".$val."\n"; } print "<br />\n"; }
und
foreach($daten->item as $items) { foreach ($items as $key=>$val) { print "<br />".$key." --- ".$val."\n"; } print "<br />\n"; }
ergeben beide
title --- Name1 info --- Info1 status --- 4 title --- Name2 info --- status --- 3 title --- Name2 info --- Info3 status ---
???
bei dem ersten mit foreach ($daten as $items) {
hätte ich erwartet, das nur <item> im foreach ist
aber auch da sind schon die Array-Elemente aus <item> in der Schleife???
häää? ... Logik ?
hemiolos schrieb:
mal ganz abgeshen davon, du hast uns eine falsche ausgabe unterbreitet. du du!
ups, sorry,
habe den Beitrag oben bearbeitet und für XML und Ausgabe je mit 3 Elemente.
-
ok. ich wollte ursprünglich nur daruf hinweisen, dass die funktion von geburt her nicht unproblematisch ist (nicht mal im letzten jahr!)! ich habe es aber dann vergessen zu notieren und so habe ich nur meinen kode veröffentlich, der eigentlich nur zeigt, dass alle teile des arrays als object interpretiert werden (warum auch immer). daher mein rat: suche dir eine möglichkeit - die gibt es auf alle fälle - um die sache umzugehen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage