php-doc-en/reference/domxml/functions/DomNode-append-child.xml
Mehdi Achour 13156130e1 Switched DOMNode->append_child() and DOMNode->add_namespace() to the new structure
Added another changelog for append_child
Added a refsect1 named migration describing how to jump from domxml to dom
Added user comments


git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@188227 c90b9560-bf6c-de11-be94-00142212c4b1
2005-06-12 19:07:02 +00:00

226 lines
6.2 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.14 $ -->
<refentry id='function.domnode-append-child'>
<refnamediv>
<refname>DomNode->append_child</refname>
<refpurpose>
Adds a new child at the end of the children
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<classsynopsis>
<ooclass><classname>DOMNode</classname></ooclass>
<methodsynopsis>
<type>DOMNode</type><methodname>append_child</methodname>
<methodparam><type>DOMNode</type><parameter>newnode</parameter></methodparam>
</methodsynopsis>
</classsynopsis>
<para>
This functions appends a child to an existing list of children or creates
a new list of children.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>newnode</parameter></term>
<listitem>
<para>
The node being appended. It can be created with e.g.
<xref linkend="function.domdocument-create-element" />,
<xref linkend="function.domdocument-create-text-node" /> etc. or
simply by using any other node.
</para>
<note>
<para>
You can not append a <classname>DOMAttribute</classname> using this
method. Use <xref linkend="function.domelement-set-attribute" />
instead.
</para>
</note>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Returns the appended node on success or &false; on failure.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>4.3.0</entry>
<entry>
You are not allowed anymore to insert a node from another document.
</entry>
</row>
<row>
<entry>4.3.0</entry>
<entry>
Prior to PHP 4.3.0, the new child is duplicated before being
appended.
Therefore the new child is a completely new copy which can be
modified without changing the node which was passed to this function.
If the node passed has children itself, they will be duplicated as
well, which makes it quite easy to duplicate large parts of an XML
document. The return value is the appended child. If you plan to do
further modifications on the appended child you must use the returned
node.
</entry>
</row>
<row>
<entry>4.3.0 and 4.3.1</entry>
<entry>
The new child <parameter>newnode</parameter> is first unlinked from
its existing context, if it's already a child of DomNode. Therefore
the <parameter>newnode</parameter> is moved and not copies anymore.
This is the behaviour according to the W3C specifications. If you
need the old behaviour, use <xref
linkend="function.domnode-clone-node" /> before appending.
</entry>
</row>
<row>
<entry>4.3.2</entry>
<entry>
The new child <parameter>newnode</parameter> is first unlinked from
its existing context, if it's already in the tree. Same rules apply.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
The following example adds a new element node to a fresh document and sets
the attribute <literal>align</literal> to <literal>left</literal>.
</para>
<para>
<example>
<title>Adding a child</title>
<programlisting role="php">
<![CDATA[
<?php
$doc = domxml_new_doc("1.0");
$node = $doc->create_element("para");
$newnode = $doc->append_child($node);
$newnode->set_attribute("align", "left");
?>
]]>
</programlisting>
</example>
</para>
<para>
The above example could also be written as the following:
</para>
<para>
<example>
<title>Adding a child</title>
<programlisting role="php">
<![CDATA[
<?php
$doc = domxml_new_doc("1.0");
$node = $doc->create_element("para");
$node->set_attribute("align", "left");
$newnode = $doc->append_child($node);
?>
]]>
</programlisting>
</example>
</para>
<para>
A more complex example is the one below. It first searches for a certain
element, duplicates it including its children and adds it as a sibling.
Finally a new attribute is added to one of the children of the new sibling
and the whole document is dumped.
</para>
<para>
<example>
<title>Adding a child</title>
<programlisting role="php">
<![CDATA[
<?php
include("example.inc");
if (!$dom = domxml_open_mem($xmlstr)) {
echo "Error while parsing the document\n";
exit;
}
$elements = $dom->get_elements_by_tagname("informaltable");
print_r($elements);
$element = $elements[0];
$parent = $element->parent_node();
$newnode = $parent->append_child($element);
$children = $newnode->children();
$attr = $children[1]->set_attribute("align", "left");
$xmlfile = $dom->dump_mem();
echo htmlentities($xmlfile);
?>
]]>
</programlisting>
</example>
</para>
<para>
The above example could also be done with
<xref linkend="function.domnode-insert-before" /> instead of
<xref linkend="function.domnode-append-child" />.
</para>
</refsect1>
<refsect1 role="migration">
<title>Migrating to PHP 5</title>
<para>
You should use <xref linkend='function.dom-domnode-appendchild' />.
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><xref linkend="function.domnode-insert-before" /></member>
<member><xref linkend="function.domnode-clone-node" /></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->