PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

SimpleXMLElement->asXML()> <SimpleXMLElement->addAttribute()
Last updated: Fri, 20 Jun 2008

view this page in

SimpleXMLElement->addChild()

(PHP 5 >= 5.1.3)

SimpleXMLElement->addChild() — Ajoute un élément enfant au noeud XML

Description

SimpleXMLElement
SimpleXMLElement addChild ( string $name [, string $value [, string $namespace ]] )

Ajoute un élément enfant au noeud et retourne un SimpleXMLElement de l'enfant.

Liste de paramètres

name

Le nom de l'élément enfant à ajouter.

value

Si spécifié, la valeur de l'élément enfant.

namespace

Si spécifié, l'espace de nom auquel l'élément enfant appartient.

Valeurs de retour

La méthode addChild retourne un objet SimpleXMLElement représentant l'enfant à ajouter au noeud XML.

Exemples

Exemple #1 Ajoute des attributs et des enfants à un élément SimpleXML

<?php

include 'example.php';

$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type''documentary');

$movie $sxe->addChild('movie');
$movie->addChild('title''PHP2: More Parser Stories');
$movie->addChild('plot''This is all about the people who make it work.');

$characters $movie->addChild('characters');
$character  $characters->addChild('character');
$character->addChild('name''Mr. Parser');
$character->addChild('actor''John Doe');

$rating $movie->addChild('rating''5');
$rating->addAttribute('type''stars');
 
echo 
$sxe->asXML();

?>



add a note add a note User Contributed Notes
SimpleXMLElement->addChild()
kobrasrealm at gmail dot com
28-Jun-2008 11:22
Here's a handy workaround to accommodate the lack of a $xml->deleteChild() function. It's not perfect, but it's a start (and it works for what I'm using it for):

<?php
// Workaround by Kobra. http://www.kobrasrealm.net
function simplexml_deleteChild($parent, $childname, $parentname)
{
$temp = simplexml_load_string(str_replace("#","?","<#xml version=\"1.0\"#>\n<".$parentname.">\n</".$parentname.">"));
foreach(
$parent as $t)
{
  if(
$t->getName() != $childname)
  {
 
$name = $t->getName();
 
$value = eval("return \$parent->".$name.";");
 
$temp->addChild($t->getName(), $value);
  }
}
return
$temp;
}

?>

I have not tested this with multi-level XML files; but like I said, it's a start.
danz at gethitz dot info
30-Jan-2008 02:12
Object cloning ...

So using the 'clone' keyword here lets you work on $new separately, and attributes added to $new don't show up in $sxe

without the 'clone' all changes to $new will be reflected in the larger $sxe tree

                $new = clone $sxe->AddChild("comment",$comment);
                $new->AddAttribute("name",$name);
                $new->AddAttribute("url",$url);
                $new->AddAttribute("ip",$ip);
                $new->AddAttribute("time",$time);
chicken dot ofeathers at gmail dot com
18-Jan-2008 08:57
Correct namespace usage:

<?php
$xml
= new SimpleXMLElement('<root xmlns:itunes="http://apple.com"/>');
$n = $xml->addChild("subtitle", "My Subtitle", " http://apple.com");
?>

Incorrect namespace usage:

<?php
$xml
= new SimpleXMLElement('<root xmlns:itunes="http://apple.com"/>');
$n = $xml->addChild("subtitle", "My Subtitle", " itunes");
?>

The latter incorrect usage results in the following superfluous xmlns attribute:

<itunes:subtitle xmlns:itunes="itunes">My Subtitle</itunes:subtitle>

Whereas all you want is this:

<itunes:subtitle>My Subtitle</itunes:subtitle>
ron @ rotflol dot cx
10-Jul-2007 06:37
Replacing a node is an easy mod of the simplexml_append

function simplexml_replace(SimpleXMLElement $parent, SimpleXMLElement $new_child){
   $node1 = dom_import_simplexml($parent);
   $dom_sxe = dom_import_simplexml($new_child);
   $node2 = $node1->ownerDocument->importNode($dom_sxe, true);
   $node1->parentNode->replaceChild($node2,$node1);
}
r dot versluis at millipede dot nl
22-May-2007 03:23
<?php
// phpversion <= 5.1.2

function simplexml_addChild($parent, $name, $value=''){
   
$new_child = new SimpleXMLElement("<$name>$value</$name>");
   
$node1 = dom_import_simplexml($parent);
   
$dom_sxe = dom_import_simplexml($new_child);
   
$node2 = $node1->ownerDocument->importNode($dom_sxe, true);
   
$node1->appendChild($node2);
    return
simplexml_import_dom($node2);
}

function
simplexml_addAttribute($parent, $name, $value=''){
   
$node1 = dom_import_simplexml($parent);
   
$node1->setAttribute($name,$value);
    return
simplexml_import_dom($node1);
}

?>
l dot j dot peters at student dot utwente dot nl
12-Mar-2007 02:49
Rob Richards and I have come up with a very easy way to append one SimpleXML tree to another:
<?php
function simplexml_append(SimpleXMLElement $parent, SimpleXMLElement $new_child){
  
$node1 = dom_import_simplexml($parent);
  
$dom_sxe = dom_import_simplexml($new_child);
  
$node2 = $node1->ownerDocument->importNode($dom_sxe, true);
  
$node1->appendChild($node2);
}
?>
And adding a textnode is also easy:
<?php
//$sxe1 (refers to SimpleXMLElement)
$node1 = dom_import_simplexml($sxe1);
$node1->appendChild(new DOMText("my text"));
?>

Ofcourse, you could use this to extend the SimpleXMLElement class and overwrite and improve the existing addChild function.

Have fun, Luuk Peters.

 
show source | credits | sitemap | contact | advertising | mirror sites