Richard: Schonwieder Probleme mit SimpleXMLElement, diesmal addChild()

Hallo,

Die addChild()-Methode des SimpleXMLElement-Objekts sollte laut Manual ab PHP 5.1.3 zur Verfügung stehen, ich habe PHP 5.1.6. Versuche ich Daten in meinen XML-String zu schreiben, passiert allerdings nichts. Ich meine wirklich _nichts_. Normalerweise müsste doch wenigstens eine Fehlermeldung kommen, von wegen "Call to undefined Function" oder so einen Kram, aber es passiert einfach gar nichts. Oder sehe ich den Wald vor Bäumen nicht?:

  
$book = $books_xml->addChild( "book" );  
$author = $book->addChild( "name", $name );  

$books_xml ist das SimpleXMLElement-Objekt mit dem XML-String. Das funktioniert auf jeden Fall, denn Daten auslesen kann ich problemlos.

Beste Grüße
Richard

  1. echo $begrüßung;

    Versuche ich Daten in meinen XML-String zu schreiben, passiert allerdings nichts. Ich meine wirklich _nichts_.

    Wie stellst du fest, dass nichts, "ich meine wirklich _nichts_" :-), passiert?

    $a = 42; <-- Hier passiert augenscheinlich erstmal auch nichts.
    echo $a; <-- Gibt 42 aus. Da war offensichtlich doch was passiert.

    $x = new SimpleXMLElement('<foo/>');  
    $x->addChild('bar');  
    print_r($x);
    

    ergibt bei mir

    SimpleXMLElement Object (
        [bar] => SimpleXMLElement Object ( )
    )

    So kann ich dein Nichts-Passieren nicht nachvollziehen.

    Normalerweise müsste doch wenigstens eine Fehlermeldung kommen, von wegen "Call to undefined Function" oder so einen Kram [...]

    Seit es __call() gibt ist das bei Objekten nicht mehr zwingend der Fall.

    echo "$verabschiedung $name";

    1. Hallo dedlfix,

      Erstmal Danke für deine Antwort.

      $x = new SimpleXMLElement('<foo/>');

      $x->addChild('bar');
      print_r($x);

      
      >   
      > ergibt bei mir  
      >   
      > SimpleXMLElement Object (  
      >     [bar] => SimpleXMLElement Object ( )  
      > )  
        
      Ja, OK. Aber warum steht dann nichts, und diesmal meine ich wirklich \_nichts\_ ;) im XML-String?  
        
      Beste Grüße  
      Richard
      
      1. echo $begrüßung;

        $x = new SimpleXMLElement('<foo/>');

        $x->addChild('bar');
        print_r($x);

        
        > >   
        > > ergibt bei mir  
        > >   
        > > SimpleXMLElement Object (  
        > >     [bar] => SimpleXMLElement Object ( )  
        > > )  
        >   
        > Ja, OK. Aber warum steht dann nichts, und diesmal meine ich wirklich \_nichts\_ ;) im XML-String?  
          
        Was für ein XML-String? Ich habe keine funktionierende Glaskugel. Du müsstest die Dinge schon so beschreiben, dass ich sie auch ohne eine solche nachvollziehen kann. Ich rate mal, dass du  
          
          echo $x->asXML();  
          
        meinst. Das erzeugt in der Tat keine augenscheinliche Ausgabe. Aber  
          
          echo htmlspecialchars($x->asXML());  
          
        ergibt  
          
          <?xml version="1.0"?>  
          <xml><bla/></xml>  
          
        (In der Quellcode-Ansicht des Browsers hätte man es auch so gesehen.)  
          
          
        echo "$verabschiedung $name";
        
        1. Hallo dedlfix,

          Was für ein XML-String? Ich habe keine funktionierende Glaskugel. Du müsstest die Dinge schon so beschreiben, dass ich sie auch ohne eine solche nachvollziehen kann. Ich rate mal, dass du

          echo $x->asXML();

          meinst. Das erzeugt in der Tat keine augenscheinliche Ausgabe. Aber

          echo htmlspecialchars($x->asXML());

          ergibt

          <?xml version="1.0"?>
            <xml><bla/></xml>

          Ich sehe schon, ich habe mir das ganz einfach falsch vorgestellt. Ich habe eine XML-Datei, aus der Daten ausgelesen werden und in die jetzt auch Daten geschrieben werden sollten. Ich dachte, sie stehen dann schon direkt in der Datei. Aber ich muss wohl explizit den modifizierten XML-String per asXML() in die Datei zurückschreiben, oder verstehe ich immernoch etwas falsch?

          Beste Grüße
          Richard

          1. Hallo Richard,

            Ich sehe schon, ich habe mir das ganz einfach falsch vorgestellt. Ich habe eine XML-Datei, aus der Daten ausgelesen werden und in die jetzt auch Daten geschrieben werden sollten. Ich dachte, sie stehen dann schon direkt in der Datei. Aber ich muss wohl explizit den modifizierten XML-String per asXML() in die Datei zurückschreiben?

            Antwort: ja. (Fürs Archiv, falls es mal jemand braucht)

            Beste Grüße
            Richard