kostenloser Webspace werbefrei: lima-city


leere XML nodes als Leerstring und nicht leeres Object

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tags

    tags hat kostenlosen Webspace.

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

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

  3. 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
  4. 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!