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

search for in the

DOMDocument::createElementNS> <DOMDocument::createDocumentFragment
Last updated: Fri, 14 Aug 2009

view this page in

DOMDocument::createElement

(PHP 5)

DOMDocument::createElementCrée un nouveau noeud

Description

DOMElement DOMDocument::createElement ( string $name [, string $value ] )

Cette fonction crée une nouvelle instance de la classe DOMElement. Ce noeud ne sera pas affiché dans le document, à moins qu'il ne soit inséré avec DOMNode->appendChild().

Liste de paramètres

name

Le nom du tag de l'élément.

value

La valeur de l'élément. Par défaut, un élément vide sera créé. Vous pouvez également définir la valeur plus tard avec la fonction DOMElement->nodeValue.

Valeurs de retour

Retourne une nouvelle instance de la classe DOMElement ou FALSE si une erreur survient.

Erreurs / Exceptions

DOM_INVALID_CHARACTER_ERR

Lancé si name contient un caractère invalide.

Exemples

Exemple #1 Création d'un nouvel élément et insertion en tant que racine

<?php

$dom 
= new DOMDocument('1.0''iso-8859-1');

$element $dom->createElement('test''Ceci est l\'élément racine !');

// Nous insérons le nouvel élément en tant que racine (enfant du document)
$dom->appendChild($element);

echo 
$dom->saveXML();
?>

L'exemple ci-dessus va afficher :

<?xml version="1.0" encoding="iso-8859-1"?>
<test>Ceci est l'élément racine !</test>

Voir aussi



add a note add a note User Contributed Notes
DOMDocument::createElement
yasindagli at gmail dot com
17-Jun-2009 09:01
To create elements with attributes,

<?php

function createElement($domObj, $tag_name, $value = NULL, $attributes = NULL)
{
   
$element = ($value != NULL ) ? $domObj->createElement($tag_name, $value) : $domObj->createElement($tag_name);

    if(
$attributes != NULL )
    {
        foreach (
$attributes as $attr=>$val)
        {
           
$element->setAttribute($attr, $val);
        }
    }

    return
$element;
}

$dom = new DOMDocument('1.0', 'utf-8');

$elm = createElement($dom, 'foo', 'bar', array('attr_name'=>'attr_value'));

$dom->appendChild($elm);

echo
$dom->saveXML();

?>

outputs :
<?xml version="1.0" encoding="utf-8"?>
<foo attr_name="attr_value">bar</foo>
chris AT cmbuckley DOT co DOT uk
26-May-2009 02:45
Note that the NUL character "\0" is not in the list of invalid characters for $name, so no error is triggered, but the tag name will be truncated at the null byte:

<?php

$dom
= new DOMDocument('1.0', 'utf-8');
$el = $dom->createElement('foo' . "\0" . 'bar', 'Hello World');
echo
$el->tagName; // outputs "foo"

?>
poison
05-Jul-2007 05:11
In response to 'mikek dot nospam at nospam dot muonics dot com', here is a more correct version, as values have to be UTF-8 encoded, and there's absolutely no reason to create an extra DOMElement class.

<?php
class ADOMDocument extends DOMDocument {

    function
__construct($version = null, $encoding = null) {
       
parent::__construct($version, $encoding);
    }

    public function
createElement($tagName, $value=null) {
       
$node=parent::createElement($tagName);
        if (!
is_null($value)) {
           
$node->appendChild(
               
$this->createTextNode(utf8_encode($value))
            );
        }
        return
$node;
    }
   
    public function
createElementNS($namespaceURI, $qualifiedName, $value=null) {
       
$node=parent::createElementNS($namespaceURI, $qualifiedName);
        if (!
is_null($value)) {
           
$node->appendChild(
               
$this->createTextNode(utf8_encode($value))
            );
        }
        return
$node;
    }
}
?>
estill at gvtc dot com
12-Jun-2007 09:38
Note that the second parameter (value), although convenient, is non-standard. You should create elements like this instead:

<?php
$doc
= new DOMDocument('1.0', 'iso-8859-1');

$root = $doc->createElement('test');
$doc->appendChild($root);

$root_text = $doc->createTextNode('This is the root element!');
$root->appendChild($root_text);

print
$doc->saveXML();
?>

Or, alternatively, extend the DOMDocument class and add your own custom, convenience method to avoid intruding on the standard:

<?php
class CustomDOMDocument extends DOMDocument {
  function
createElementWithText($name, $child_text) {
   
// Creates an element with a child text node
   
    // @param  string  $name        element tag name
    // @param  string  $child_text  child node text
   
    // @return  object  new element
   
   
$element = $this->createElement($name);
   
   
$element_text = $this->createTextNode($child_text);
   
$element->appendChild($element_text);
   
    return
$element;
  }
}

$doc = new CustomDOMDocument('1.0', 'iso-8859-1');

$root = $doc->createElementWithText('test', 'This is the root element!');
$doc->appendChild($root);

print
$doc->saveXML();
?>

Also use caution with (or avoid) the 'DOMElement->nodeValue' property. It can return some unexpected values and changing its value will replace (remove) all descendants of the element with a single text node. It's also non-standard; according to the DOM spec it should return NULL.
mikek dot nospam at nospam dot muonics dot com
04-Mar-2007 01:24
With regard to the note below about needing htmlentities to avoid warnings about unterminated entity references, I thought it worthwhile to mention that that you don't need to with createTextNode and DOMText::__construct.  If you mix both methods of setting text nodes and do (or don't) apply htmlentities consistently to all data to be displayed, you'll get &amp;s (or warnings and badly-formed xml).

It's probably in one's best interest to extend DOMElement and DOMDocument so that it creates a DOMText node and appends it, rather than passing it up to the DOMElement constructor.  Otherwise, good luck using (or not using) htmlentities in all the right places in your code, especially as code changes get made.

<?php

class XDOMElement extends DOMElement {
    function
__construct($name, $value = null, $namespaceURI = null) {
       
parent::__construct($name, null, $namespaceURI);
    }
}

class
XDOMDocument extends DOMDocument {
    function
__construct($version = null, $encoding = null) {
       
parent::__construct($version, $encoding);
       
$this->registerNodeClass('DOMElement', 'XDOMElement');
    }

    function
createElement($name, $value = null, $namespaceURI = null) {
       
$element = new XDOMElement($name, $value, $namespaceURI);
       
$element = $this->importNode($element);
        if (!empty(
$value)) {
           
$element->appendChild(new DOMText($value));
        }
        return
$element;
    }
}

$doc1 = new XDOMDocument();
$doc1_e1 = $doc1->createElement('foo', 'bar & baz');
$doc1->appendChild($doc1_e1);
echo
$doc1->saveXML();

$doc2 = new XDOMDocument();
$doc2_e1 = $doc2->createElement('foo');
$doc2->appendChild($doc2_e1);
$doc2_e1->appendChild($doc2->createTextNode('bar & baz'));
echo
$doc2->saveXML();

?>

Text specified in createElement:
<?xml version=""?>
<foo>bar &amp; baz</foo>

Text added via createTextNode:
<?xml version=""?>
<foo>bar &amp; baz</foo>
sergsokolenko at gmail dot com
30-Jan-2007 12:11
To avoid warning message "unterminated entity reference" you may use htmlentities() for escaping supplied value:
<?php
//...
$dom->createElement('name', htmlentities($text))
//...
?>

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