Problem beim Hinzufügen von XML-Elementen

marfirk

Gesperrt
Hi,

Ich möchte in eine bestehende .xml-Datei einige Daten einfügen. Dabei will ich zuerst abfragen, ob gewisse Daten schon existieren und gegebenenfalls hinzufügen.

Genauer habe ich folgende Informationen:
  • Klasse
  • Trakt
  • Stockwerk
  • Raum

Ich möchte jetzt in folgendem Stil die Informationen speichern:

PHP:
<main>
<trakt>
<stockwerk>
<raum>Klasse</raum>
</stockwerk>
<trakt>
</main>

Dabei soll geprüft werden, inwiefern der Trakt, oder das Stockwer, etc schon vorhanden sind und gegebenenfalls ergänzt werden, bis die oben aufgeführte Struktur vorhanden ist.

Das ist mein PHP-Code:

PHP:
$xmlraum=simpleXML_load_file("data/map_raum.xml");
//Gibt es $trakt schon?
if($xmlraum->$trakt){
  //Gibt es $trakt->$stockwerk schon?
  if($xmlraum->$trakt->$stockwerk){
    //Gibt es da den $raum schon?
    if($xmlraum->$trakt->$stockwerk->$raum){
      //Wenn $raum steht was
	  if($xmlraum->$trakt->$stockwerk->$raum != ""){
        //dann: Ausgabe der schnelleren Klasse
        $schnellereKlasse=$xmlraum->$trakt->$stockwerk->$raum;
        echo "Besetzt von der Klasse: $schnellereKlasse"; 
      }
	  //Wenn $raum nix steht:
      else{
        //Gebe $klasse ein
		$xmlraum->$trakt->$stockwerk->$raum="$klassenstufe$buchstabe";
        $xmlraum->asXML("data/map_raum.xml");
	  }
    }else{
      //Add neuen Raum
      $xmlraum->$trakt->$stockwerk->addChild("$raum","$klassenstufe$buchstabe");
	  echo $xmlraum->asXML("data/map_raum.xml");
    }
  }else{
    //Add neuen Stock
    $xmlraum->$trakt->addChild("$stockwerk");
    $xmlraum->$trakt->$stockwerk->addChild("$raum","$klassenstufe$buchstabe");
	echo $xmlraum->asXML("data/map_raum.xml");
  }
}else{
  //Add neuen Trakt
  $xmlraum->addChild("$trakt");
  $xmlraum->$trakt->addChild("$stockwerk");
  $xmlraum->$trakt->$stockwerk->addChild("$raum","$klassenstufe$buchstabe");
  echo $xmlraum->asXML("data/map_raum.xml");

}

Der erste Eintrag wird auch ganz brav geschrieben, nur bei weiteren Einträgen gibt es eine ellenlange Fehlerliste.

Ich habe hier mal die IMO interessantesten Fehler:
Warning: simplexml_load_file() [function.simplexml-load-file]: data/map_raum.xml:2: parser error : StartTag: invalid element name in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: <raum><item2>hihi<blubb>asdf</blubb></item2><n><stock1><2>4d</2></stock1></n></r in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Fatal error: Call to a member function addChild() on a non-object in C:\xampp\htdocs\f\write_neue_klasse.php on line 50

Ich hoffe, jemand kann sich da einen Reim drauf machen?! Ich bin leider noch recht neu in PHP und XML....

Ich wünsche allen einen guten Rutsch ins neue Jahr!

marfirk
 
<Antwort>
Um dir zu helfen, wären die von den Fehlern betroffenen Ausschnitte aus dem echten Code hilfreich! Das heißt 1. die entsprechende XML Datei und 2. einen Hinweis, wo wir Zeile 15 in deinem Script finden können.
<Glaskugel>
Die Fehlermeldung weißt auf ein Zeichen hin, das nicht der Codierung entspricht. Die meisten folgenden Fehler werden aus einem der ersten entstanden sein, da bei dem Fehler die Objektinstanz nicht gebildet wurde und dann Objektmethoden-Aufrufe zu Fehlern führen.
</Glaskugel>
</Antwort>
 
Hey,

Zeile 15 ist folgende:

PHP:
$xmlraum=simpleXML_load_file("data/map_raum.xml");

Also, hier im Code ganz am Anfang, im Vorfeld werden nur die Daten per $_GET eingelesen.

Zeile 50 ist folgende:

PHP:
  //Add neuen Trakt
  $xmlraum->addChild("$trakt");

Was meintest du mit:

Das heißt 1. die entsprechende XML Datei


Ich hänge jetzt einfach nochmal die gesamte Fehlermeldungsliste an:

Warning: simplexml_load_file() [function.simplexml-load-file]: data/map_raum.xml:2: parser error : StartTag: invalid element name in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: <raum><item2>hihi<blubb>asdf</blubb></item2><n><stock1><2>4d</2></stock1></n></r in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: data/map_raum.xml:2: parser error : expected '>' in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: <raum><item2>hihi<blubb>asdf</blubb></item2><n><stock1><2>4d</2></stock1></n></r in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: data/map_raum.xml:2: parser error : Opening and ending tag mismatch: stock1 line 2 and unparseable in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: <raum><item2>hihi<blubb>asdf</blubb></item2><n><stock1><2>4d</2></stock1></n></r in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: data/map_raum.xml:2: parser error : Opening and ending tag mismatch: n line 2 and stock1 in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: <raum><item2>hihi<blubb>asdf</blubb></item2><n><stock1><2>4d</2></stock1></n></r in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: data/map_raum.xml:2: parser error : Opening and ending tag mismatch: raum line 2 and n in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: <raum><item2>hihi<blubb>asdf</blubb></item2><n><stock1><2>4d</2></stock1></n></r in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: data/map_raum.xml:2: parser error : Extra content at the end of the document in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: <raum><item2>hihi<blubb>asdf</blubb></item2><n><stock1><2>4d</2></stock1></n></r in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\xampp\htdocs\f\write_neue_klasse.php on line 15

Fatal error: Call to a member function addChild() on a non-object in C:\xampp\htdocs\f\write_neue_klasse.php on line 50
 
Hat jemand eine Idee?

@Foaly-I:

In der XML steht sonst nichts, nur der Anfang:

PHP:
<?xml version="1.0" encoding="utf-8"?>

Ich habe es mit verschiedenen Zeichenkodierungen versucht, gibt keinen Unterschiede...:(
 

Neue Beiträge

Zurück