kostenloser Webspace werbefrei: lima-city


simplexml_load_file und leere XML Elemente

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    sparsuche

    sparsuche hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wenn du dir die Daten von dem leeren Info Feld holst und das zu einem String machst (sei es mit print oder (string) $feld). Erhältst du einen Lehren String.
  4. sparsuche schrieb:
    ... dann macht simplexml_load_file als Wert nicht einen Leerstring
    sondern ein leeres Onjekt ???
    na dann einen kurzen blick mal auf die ausgabe
    <?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
  5. Autor dieses Themas

    sparsuche

    sparsuche hat kostenlosen Webspace.

    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.
  6. 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.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!