Replace the child node refChild with newChild in the list of childs and returns the node refChild. If newChild is an object DocumentFragment, refChild is replaced for all the childs of DocumentFragment, which are inserted in the same order. If the newChild is already in the tree is deleted.
A child is a first-level descendant, if it is indicated a non first-level descendant, it will be generated the exception NOT_FOUND_ERR.
1 dom.node.replaceChild
<dom.node.replaceChild>
<node /> !
<newChild /> !
<refChild /> !
</dom.node.replaceChild>
Arguments | |||||
---|---|---|---|---|---|
Name | Type | Required | Unique | Nullable | Description |
Enode | Node | Node which will be replaced. | |||
EnewChild | Node | Nuevo nodo. | |||
ErefChild | Node | The node being replaced in the list. |
Returns | |
---|---|
Type | Description |
Node | Returns the replaced node. |
Returns
HIERARCHY_REQUEST_ERR
Appears if this node is of a type that not allow childs of the newChild node, if the type of the node to put is one of the ancestors of the node itself or the node itself, also if the node is of the Document type and the result of the substitution operation will add a second DocumentType or Element in the Document node.
WRONG_DOCUMENT_ERR
Appears if newChild has been created of a different document than the one created by this node.
NO_MODIFICATION_ALLOWED_ERR
Appears if the node is readonly or if the previous parent of the node being inserted is readonly.
NOT_FOUND_ERR
Appears if refChild is not a child of this node. A child is a first-level descendant.
NOT_SUPPORTED_ERR
If this node is of the type Document, this exception can appear if the DOM implementation does not suppourt the replace of the DocumentType child or Element child.
Remarks
If the node to be added does not belong to the document to which it belongs to the node in which it is to be added, is necessary to perform first an import of the node which will be added, to decontextualize it, it means, to unlink it of its owner document and in this way can use it in a different document. This operation should be performed when adding ( dom.node.insertBefore), replacing( dom.node.replaceChild) or inserting ( dom.node.insertBefore).
The function replaceChild replaces a node child of the indicated node. A node child is a first-level descendant. If it is not indicated a first-level descendant in the argument refChild it will be generated the exception NOT_FOUND_ERR.
Replaces a node of a document with another node of a different document.
<xsql-script name='dom_node_appendChild'> <body> <set name='root_ori'><dom.parse><file name='data1.xml' type='absolute' /></dom.parse></set> <set name='root_rpl'><dom.parse><file name='data2.xml' type='absolute' /></dom.parse></set> <!-- The node should be imported to unlink it of its --> <!-- owner document, and be able to use it in a new document. --> <set name='node_rpl'> <dom.document.importNode> <root_ori/> <dom.node.getFirstChildElement><root_rpl/></dom.node.getFirstChildElement> </dom.document.importNode> </set> <!-- Replace the first element chiñd (first-level descendant) of the original --> <!-- document with the node of the replacement document. --> <dom.node.replaceChild> <root_ori/> <node_rpl/> <dom.element.getFirstChildElement><root_ori /></dom.element.getFirstChildElement> </dom.node.replaceChild> <!-- Retorna: <xsql-script name="print"> <HOLA> <test/> <string>HELLO ECHO</string> </HOLA> </xsql-script> --> <println> <root_ori/> </println> </body> </xsql-script>
Replace a node of a document using the function getElementByXPath.
<xsql-script name='dom_node_replaceChild'> <body> <set name='root_ori'><dom.parse><file name='data1.xml' type='absolute' /></dom.parse></set> <set name='root_rpl'><dom.parse><file name='data2.xml' type='absolute' /></dom.parse></set> <!-- The node should be imported to unlink it of its --> <!-- owner document, and be able to use it in a new document. --> <set name='node_rpl'> <dom.document.importNode> <root_ori/> <dom.node.getFirstChildElement><root_rpl/></dom.node.getFirstChildElement> </dom.document.importNode> </set> <!-- Replace the first element child (first-level descendant) of the original --> <!-- document with the node of the replacement document. --> <dom.node.replaceChild> <root_ori/> <node_rpl/> <dom.element.getFirstChildElement><root_ori /></dom.element.getFirstChildElement> </dom.node.replaceChild> <!-- Returns: <xsql-script name="print"> <HOLA> <test/> <string>HELLO ECHO</string> </HOLA> </xsql-script> --> <println> <root_ori/> </println> </body> </xsql-script>
Replace the node document/body/s1[@title='Programación']/s2[@title='Árbol'] , it means, the first tag s2 by:
<document> <element>hello</element> <element>world</element> </document>
The function replaceChild replaces a node child. A node child is a first-level descendant, so it is not correct:
<dom.node.replaceChild> <prv_data /> <node_rpl_new /> <dom.getElementByXPath xpath="#m_xpath"><prv_data /></dom.getElementByXPath> </dom.node.replaceChild>
And generates the exception:
org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.
Sinche the node founded with dom.getElementByXPath is not a child of the document prv_data because it is not first-level descendant, it is a descendant but not of first-level. The correct form is:
<dom.node.replaceChild> <dom.node.getParentNode><dom.getElementByXPath xpath="#m_xpath"><prv_data /></dom.getElementByXPath></dom.node.getParentNode> <node_rpl_new /> <dom.getElementByXPath xpath="#m_xpath"><prv_data /></dom.getElementByXPath> </dom.node.replaceChild>
Now the childRef is really a first-level descendant of the node of the node from which the substitution is made.