php-doc-en/reference/domxml/functions/DomNode-append-child.xml
Jakub Vrana 3c4233bca6 Change "object" to specific objects
# please revise it
# letter case is taken from sources


git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@173347 c90b9560-bf6c-de11-be94-00142212c4b1
2004-11-23 09:22:12 +00:00

138 lines
4.4 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.12 $ -->
<!-- splitted from ./en/functions/domxml.xml, last change in rev 1.40 -->
<refentry id='function.domnode-append-child'>
<refnamediv>
<refname>DomNode->append_child</refname>
<refpurpose>
Adds new child at the end of the children
</refpurpose>
</refnamediv>
<refsect1>
&reftitle.description;
<methodsynopsis>
<type>domelement</type><methodname>DomNode->append_child</methodname>
<methodparam><type>domelement</type><parameter>newnode</parameter></methodparam>
</methodsynopsis>
<para>
This functions appends a child to an existing list of children or creates
a new list of children. The child can be created with e.g.
<function>domdocument_create_element</function>,
<function>domdocument_create_text</function> etc. or simply by using any
other node.
</para>
<para>
(PHP &lt; 4.3) Before a new child is appended it is first duplicated. 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.
</para>
<para>
(PHP 4.3.0/4.3.1) The new child <parameter>newnode</parameter> is first
unlinked from its existing context, if it's already a child of DomNode.
Therefore the node is moved and not copies anymore.
</para>
<para>
(PHP &gt;= 4.3.2) The new child <parameter>newnode</parameter> is first
unlinked from its existing context, if it's already in the tree. Therefore
the node is moved and not copied. This is the behaviour according to the
W3C specifications. If you want to duplicate large parts of an XML document,
use DomNode->clone_node() before appending.
</para>
<para>
The following example will add a new element node to a fresh document
and sets the attribute "align" to "left".
<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>
The above example could also be written as the following:
<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>
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.
<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");
echo "<pre>";
$xmlfile = $dom->dump_mem();
echo htmlentities($xmlfile);
echo "</pre>";
?>
]]>
</programlisting>
</example>
The above example could also be done with
<function>domnode_insert_before</function> instead of
<function>domnode_append_child</function>.
</para>
<para>
See also <function>domnode_insert_before</function>, and
<function>domnode_clone_node</function>.
</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
-->