home / experts / javascript / column102 |
|
The DOMDocument object exposes the createNode() method. You can use this method to create most of the dozen node types. You cannot create nodes of the following types:
6 ("entity")9 ("document")10 ("documenttype")12 ("notation")The syntax of the method is as follows:
createNode(type, name, namespaceURI)
where:
type is a value that uniquely identifies the node type. It can be specified by an integer between 1 and 12, or by a string identical to the nodeTypeString property of the node. For example, to create a node of type attribute, set type to 2 or "attribute".
name is a string containing the new node's desired nodeName property. You cannot set the name of all node types. Some node types enforce a constant string as their node name. The table on Page 3 lists all node types and the restrictions on their names. For example, node type 11 ("documentfragment") has a fixed name ("#document-fragment") which you cannot change. Specify an empty string for such node types (""). Non-empty strings will be ignored.namespaceURI is a string defining the namespace Uniform Resource Identifier (URI). If specified, the node will be created in the context of the namespaceURI, including any prefix specified with the node name. If a prefix is not specified, the default namespace is used. When namespaceURI is the empty string, "", the node is created within the special namespace of the current document.Let's look at an example. The following code creates an XML object from an external file:
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument"); xmlDoc.async = false;
and then creates a new attribute node:
MyNode = xmlDoc.createNode("attribute", "Year", "");
The node is an object. We need to link him to our mydvd tree. Let's add it to the root's first child node. The root of the tree is <sales>. Its first child node, (see the tree representation in Page 2 of our previous column), is <summary>. Let's code it. You usually start navigating the tree from the root. The root of the tree is:
xmlDoc.documentElement;
The collection of the root's childNodes is:
xmlDoc.documentElement.childNodes
The first item on this collection is the first child:
xmlDoc.documentElement.childNodes.item(0)
The collection of attributes of this node (<sales>) is:
xmlDoc.documentElement.childNodes.item(0).attributes
To insert the new node to this collection, you use the setNamedItem() method, with the new node object as a parameter:
xmlDoc.documentElement.childNodes.item(0).attributes.setNamedItem(MyNode)
The addNode() function summarizes the above calls:
function addNode() { var xmlDoc = new ActiveXObject("Msxml2.DOMDocument"); var MyNode; var namedNodeMap; xmlDoc.async = false; xmlDoc.load("mydvd.xml"); alert(xmlDoc.documentElement.xml); MyNode = xmlDoc.createNode("attribute", "Year", ""); namedNodeMap = xmlDoc.documentElement.childNodes.item(0).attributes; namedNodeMap.setNamedItem(MyNode); alert(xmlDoc.documentElement.xml); }
Try it now. The first alert box echoed the XML file before adding the attribute node. The second alert box reflects the addition. Notice the Year attribute within the <summary> tag.
Next: How to create an element (tag) node
Produced by Yehuda Shiran and Tomer Shiran
All Rights Reserved. Legal Notices.
Created: January 28, 2002
Revised: January 28, 2002
URL: http://www.webreference.com/js/column102/4.html