# SimpleXML und addChild()



## Barbudos (30. März 2007)

Hallo,

ich hab ein Problem mit SimpleXml. Das Problem: Ich möchte in eine bestehende XML Datei einfach ein childnode mit zwei Attributen hinzufügen. Aber irgendwie will das skript nich so wie ich will. Ich bin auch noch Neuling in Sachen SimpleXML.... verdammt

Hier mal das XMLFile


```
<?xml version="1.0" encoding="UTF-8"?>
<XMLMeassgeBoard>
<message date ="29.02.06" msg="Die Record-Release-Party im E-Werk zu Zossen wurde wuerdig celebriert ... " />
<message date ="28.02.06" msg="zu jedem Konzerttermin rechtzeitig bescheid bekommen..." />
</XMLMeassgeBoard>
```
und der PHP code:



```
<?
$xml = simplexml_load_file('messageBoard.xml');

$xmlElem = new SimpleXMLElement(xml);

$message = $xmlElem->addChild('message');
$message->addAttribute('date', '31.02.2007');
$message->addAttribute('msg', 'jetz lauf endlich');
?>
```
Ich hab mittlerweile so lang im Netz die PHP Docs durchsucht, so das ich nicht mehr durchblicke. Was muss ich denn nun machn, dass nachdem ausführen des Scripts meine XMLDatei einen Eintag mehr hat? Was mach ich falsch?

Vielen Dank schon mal.


----------



## muhkuh (30. März 2007)

Ich kenne die Klasse zwar nicht, aber dein Code kann gar nicht funktionieren  


```
$xml = simplexml_load_file('messageBoard.xml');

$xmlElem = new SimpleXMLElement(xml);

$xmlElem->addChild('message');
$xmlElem->addAttribute('date', '31.02.2007');
$xmlElem->addAttribute('msg', 'jetz lauf endlich');
```


----------



## birnkammer (30. März 2007)

Nein, das stimmt schon, da die Methode addChild() wiederum ein Obejkt zurückgibt.


----------



## Gumbo (30. März 2007)

```
$xml = simplexml_load_file('messageBoard.xml');
$message = $xml->addChild('message');
$message->addAttribute('date', '31.02.2007');
$message->addAttribute('msg', 'jetz lauf endlich');
```


----------



## Barbudos (31. März 2007)

Ok die Herren, vielen Dank schon mal.

aber irgendwie bringt er mir immer noch nen paar fehler...

der code sieht jetzt wie folgt aus, habe ein zwei fehler behoben und am ende den asXML Befehl angefügt, so dass es auch in die Datei geschrieben wird, aber immernoch FEHLERFEHLERFEHLER

hier mal der aktuelle code:


```
<?
foreach ($_REQUEST as $key => $elem) {${$key} = $elem;} //umwandlung der $_request vars in globale variablen

$xmlElem = new SimpleXMLElement($xml);
$xml = simplexml_load_file("messageBoard.xml");
$message = $xml->addChild('message');
$message->addAttribute('date', '31.02.2007');
$message->addAttribute('msg', 'jetz lauf endlich');

echo $xmlElem->asXML();
?>
```

und hier mal die Fehlermeldung:

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newone\messageBoard_schreiben.php:4 Stack trace: #0 C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newone\messageBoard_schreiben.php(4): SimpleXMLElement->__construct('') #1 {main} thrown in C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newone\messageBoard_schreiben.php on line 4

hmmm... danke nochmal


----------



## Barbudos (31. März 2007)

ok hab nichn bissl rumgeschaut und bin jetzt auf den code gekommen.
es werden mir allerdings immernoch ordentlich fehler rausgehauen.

PHP-Code:

```
<?
foreach ($_REQUEST as $key => $elem) {${$key} = $elem;} //umwandlung der $_request vars in globale variablen


$xml = simplexml_load_file("messageBoard.xml");
$xmlElem = new SimpleXMLElement($xml);
$message = $xml->addChild('message');
$message->addAttribute('date', '31.02.2007');
$message->addAttribute('msg', 'jetz lauf endlich');

echo $xmlElem->asXML();
?>
```
naja und hier mal die Meldung

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 4: parser error : Start tag expected, '<' not found in C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newo..._schreiben.php on line 6

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: in C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newo..._schreiben.php on line 6

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: ^ in C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newo..._schreiben.php on line 6

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newo...chreiben.php:6 Stack trace: #0 C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newo...reiben.php(6): SimpleXMLElement->__construct('?') #1 {main} thrown in C:\XAMP\xampp\htdocs\http://www.barbudos-movement.de_newo..._schreiben.php on line 6

Ähhh bitte was? String could nt be parsed? aber die syntax is doch eigentlich ganz korrekt...
Beitrag bearbeiten/löschen


----------



## Gumbo (1. April 2007)

Lass nachfolgende Anweisung einfach weg. Die simplexml_load_file()-Funktion erzeugt bereits ein SimpleXML-Objekt.
	
	
	



```
$xmlElem = new SimpleXMLElement($xml);
```


----------

