HTML 4.01 strict HTML
Visit Sourceforge.net


CONTENTS
What files do I need to include to use the Classic DOM Parser?
How do I get started with the Classic DOM parser?
 
XMLDoc Object - Constructor
XMLDoc Object - createXMLNode method
XMLDoc Object - docNode property
XMLDoc Object - getUnderlyingXMLText method
XMLDoc Object - hasErrors property
XMLDoc Object - insertNodeAfter method
XMLDoc Object - insertNodeInto method
XMLDoc Object - loadXML method
XMLDoc Object - removeNodeFromTree method
XMLDoc Object - replaceNodeContents method
XMLDoc Object - source property
 
XMLDoc/XMLNode Object - selectNode method
XMLDoc/XMLNode Object - selectNodeText method
 
XMLNode Object - Constructor
XMLNode Object - addAttribute method
XMLNode Object - getAttribute method
XMLNode Object - getAttributeNames method
XMLNode Object - getElementById method
XMLNode Object - getElements method
XMLNode Object - getText method
XMLNode Object - getParent method
XMLNode Object - getUnderlyingXMLText method
XMLNode Object - nodeType property
XMLNode Object - removeAttribute method
XMLNode Object - tagName property
XMLNode Object - toString method
 
convertEscapes
convertToEscapes
trim
What files do I need to include to use the Classic DOM Parser?

To use XML for <SCRIPT>'s Classic DOM Parser, you need to include xmldom.js from the jsXMLParser directory.

If you wish to use a compressed version of the parser (comments, line breaks etc removed) you may replace xmldom.js with tinyxmldom.js from the jsXMLParser/compressed directory.

How do I get started with the Classic DOM parser?

It's very easy, really. Let's say you have the following XML:

<?xml version="1.0"?>
<ROOTNODE>
<TAG1>
Hello World
</TAG1>
</ROOTNODE>

and you want to get the text out of the TAG1 tag. Here's the code:

function displayXML() {
var xml;
xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "Hello World"
+ "</TAG1>"
+ "</ROOTNODE>";

//instantiate a new XMLDoc object. Send any errors to the xmlError function
var objDom = new XMLDoc(xml, xmlError)
//get the root node
var objDomTree = objDom.docNode;
//get all of the elements named "TAG1"
var tag1Elements = objDomTree.getElements("TAG1");
//get the first "TAG1" element
var element = tag1Elements[0];
//now get the text
var text = element.getText();
//show the user
alert(text);
} // end function displayXML

function xmlError(e) {
//there was an error, show the user
alert(e);
} //end function xmlError
XMLDoc Object - Constructor

var objDom = new XMLDoc(<xml string>, <error function>)

accepts:
<xml string>: string containing XML text
<error function>: function name to call if there is an error

returns:
new XMLDoc object

Example:
function displayXML() {
var xml;
xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "Hello World"
+ "</TAG1>"
+ "</ROOTNODE>";

//instantiate a new XMLDoc object. Send any errors to the xmlError function
var objDom = new XMLDoc(xml, xmlError)
} // end function displayXML

function xmlError(e) {
//there was an error, show the user
alert(e);
} //end function xmlError
XMLDoc Object - createXMLNode method

var newNode = objDom.createXMLNode(<xml string>);

accepts:
<xml string>: string containing XML text

returns:
new XMLNode object

createXMLNode is a convienience function to create a new node that inherits the properties of the document object

Example:
//objDom is an object of type XMLDoc
var newNode = objDom.createXMLNode("<TAG2>test</TAG2>");

See also: domManipulationTestOne in domTestSuite.js

XMLDoc Object - docNode property

var rootNode = objDom.docNode;

accepts:
N/A

returns:
new XMLNode object

If the instantiation of the XMLDoc object is successful, the docNode property will return the root node of the XML text.

Example:
xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "Hello World"
+ "</TAG1>"
+ "</ROOTNODE>";

var objDom = new XMLDoc(xml, xmlError);
//get the root node
var objDomTree = objDom.docNode;

XMLDoc Object - getUnderlyingXMLText method

objDom.getUnderlyingXMLText()

accepts:
N/A

returns:
string: The current XML representation of the XMLDoc object omitting processing instructions and DTD's. Also, this function turns any <TAG/> tags into <TAG></TAG>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<FOO>"
+ "<BAR>"
+ "hello"
+ "</BAR>"
+ "</FOO>";
var objDom = new XMLDoc(xml, xmlError);
alert(objDom.getUnderlyingXMLText());

See also: underlyingXMLFunctionsTestOne in domTestSuite.js

XMLDoc Object - hasErrors property

objDom.hasErrors;

accepts:
N/A

returns:
N/A

Checking for the hasErrors property is one way of determining if an error has been reported. The recommended way of checking, however, is to catch the error in the error function passed into the XMLDoc constructor.

Example:
xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<>"
+ "</ROOTNODE>";
var objDom = new XMLDoc(xml, xmlError);
alert(objDom.hasErrors);
XMLDoc Object - insertNodeAfter method

objDom = objDom.insertNodeAfter(<reference node>, <new node>)

accepts:
<reference node>: the node to insert the new node after
<new node>: the new node object to insert after the reference node object

returns:
new XMLDoc object

insertNodeAfter will place a new node after the reference node at the same level. For example, inserting a new node with the text <NEW>new!</NEW> after the <REFERENCE> node in the following XML will yield:

Users of XML for <SCRIPT> should call the convertToEscapes function any time they are performing dom manipulation by adding new nodes consisting of user-generated text with the exception of CDATA type nodes. While XML for <SCRIPT> is generally rather loose with what it will allow in text, many other parsers are not and will generate an error if one of these characters is unescaped. For more information, see the information under convertToEscapes in the TOOLS section of the documentation.

Before:
<ROOTNODE>
<REFERENCE>
reference node
</REFERENCE>
</ROOTNODE>

After:
<ROOTNODE>
<REFERENCE>
reference node
</REFERENCE>
<NEW>
new!
</NEW>
</ROOTNODE>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "</TAG1>"
+ "</ROOTNODE>"
var objDom = new XMLDoc(xml, xmlError);
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//create the new node
var newNode = objDom.createXMLNode("<TAG2>test</TAG2>");
//now add it to the tree
objDom = objDom.insertNodeAfter(referenceNode, newNode);

See also: domManipulationTestOne in domTestSuite.js

XMLDoc Object - insertNodeInto method

objDom = objDom.insertNodeInto(<reference node>, <new node>)

accepts:
<reference node>: the node to insert the new node into
<new node>: the new node object to insert into the reference node object

returns:
new XMLDoc object

insertNodeInto will place a new node into the reference node directly after the end of the reference node's tag declaration. For example, inserting a new node with the text <NEW>new!</NEW> into the <REFNCE> node in the following XML will yield:

Users of XML for <SCRIPT> should call the convertToEscapes function any time they are performing dom manipulation by adding new nodes consisting of user-generated text with the exception of CDATA type nodes. While XML for <SCRIPT> is generally rather loose with what it will allow in text, many other parsers are not and will generate an error if one of these characters is unescaped. For more information, see the information under convertToEscapes in the TOOLS section of the documentation.

Before:
<ROOT>
<REFNC>
<TAG1>
value
</TAG1>
</REFNC>
</ROOT>

After:
<ROOT>
<REFNC>
<NEW>
new!
</NEW>
<TAG1>
value
</TAG1>
</REFNC>
</ROOT>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<TAG1>"
+ "<TAG3>"
+ "value"
+ "</TAG3>"
+ "</TAG1>"
+ "</ROOT>";
var objDom = new XMLDoc(xml, xmlError);
//first find the node to insert into, in this case, TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//create the new node
var newNode = objDom.createXMLNode("<TAG2>test</TAG2>");
//now add it to the tree
objDom = objDom.insertNodeInto(referenceNode, newNode);

See also: domManipulationTestTwo in domTestSuite.js

XMLDoc Object - loadXML method

loadStatus = objDom.loadXML(<XML String>)

accepts:
<XML String>: The XML String to parse

returns:
true if the parsing was successful
false if the parsing failed

The primary purpose of the loadXML method is to reuse a pre-existing XMLDoc object and load it with new data.

NOTE: To read information out of the new XMLDoc object, you will need to get a new handle to the new XMLDoc object docNode via the docNode property. See below for an example of the correct syntax.

function displayXML() {
var xml1;
xml1 = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "Hello World"
+ "</TAG1>"
+ "</ROOTNODE>";


var xml2;
xml2 = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "Why Hello. Say, do you have the time"
+ "</TAG1>"
+ "</ROOTNODE>";
//instantiate a new XMLDoc object. Send any errors to the xmlError function
var objDom = new XMLDoc(xml1, xmlError)
//get the root node
var objDomTree = objDom.docNode;
//get all of the elements named "TAG1"
var tag1Elements = objDomTree.getElements("TAG1");
//get the first "TAG1" element
var element = tag1Elements[0];
//now get the text
var text1 = element.getText();
//now load the 2nd XML
objDom.loadXML(xml2);
//get the new root node
var objDomTree = objDom.docNode;
//get all of the elements named "TAG1"
var tag1Elements = objDomTree.getElements("TAG1");
//get the first "TAG1" element
var element = tag1Elements[0];
//now get the text
var text2 = element.getText();
//now show the user
alert("the first value was " + text1 + ". The second value was " + text2);
} // end function displayXML

See also domLoadTestOne and domLoadTestTwo in domTestSuite.js

XMLDoc Object - removeNodeFromTree method

objDom = objDom.removeNodeFromTree(<reference node>)

accepts:
<reference node>: the node to remove from the tree

returns:
new XMLDoc object

removeNodeFromTree will remove the reference node (and all of it's children) from the XMLDoc object. For example, removing the node with the text <NEW>new!</NEW> from the following XML will yield:

Before:
<ROOT>
<REFNC>
<NEW>
<TAG1>
value
</TAG1>
</NEW>
</REFNC>
</ROOT>

After:
<ROOT>
<REFNC>
</REFNC>
</ROOT>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<TAG1>"
+ "<TAG2>"
+ "hello"
+ "</TAG2>"
+ "</TAG1>"
+ "</ROOT>";
var objDom = new XMLDoc(xml, xmlError);
//first find the node that we want to delete in this case it is TAG2
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0].getElements("TAG2")[0];
//now remove the node
//******** REMEMBER that the return value is a new DOM object!!! ********
objDom = objDom.removeNodeFromTree(referenceNode);

See also: domManipulationTestThree in domTestSuite.js

XMLDoc Object - replaceNodeContents method

objDom = objDom.replaceNodeContents(<reference node>, <value>)

accepts:
<reference node>: the node to have it's contents replaced
<value>: the new value of the node

returns:
new XMLDoc object

replaceNodeContents is generally used to replace the text value of a node. <value> is commonly just the new string value you would like returned in the node's getText() method. In this case, the text of the node is replaced word for word with what is passed in by the <value> parameter. However, <value> can also be a totally new XML string, allowing for the placement of any number of new nodes inside the reference node.

Unlike the function insertNodeInto, replaceNodeContents removes all of the current contents of the reference node and replaces them with the contents of <value>. The only information retained are the attributes of the node.

For example, replacing the contents of <TAG1> with "hello" in the following XML will yield:

Before:
<ROOT>
<REFNC>
<TAG1>
value
</TAG1>
</REFNC>
</ROOT>

After:
<ROOT>
<REFNC>
<TAG1>
hello
</TAG1>
</REFNC>
</ROOT>

Replacing the contents of <REFNC> with "hello" in the following XML will yield:

Before:
<ROOT>
<REFNC>
<TAG1>
value
</TAG1>
</REFNC>
</ROOT>

After:
<ROOT>
<REFNC>
hello
</REFNC>
</ROOT>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1 attribute=\"keepme\">"
+ "foo"
+ "</TAG1>"
+ "</ROOTNODE>";
var objDom = new XMLDoc(xml, xmlError);
//first find a node to replace its contents, in this case, TAG1
var domTree = objDom.docNode;
var rfnceNode = domTree.getElements("TAG1")[0];
//now do the replace
//******** REMEMBER that the return value is a new DOM object!!! ********
objDom = objDom.replaceNodeContents(rfnceNode, "new value");

See also: domManipulationTestFour in domTestSuite.js

XMLDoc Object - source property

objDom.source;

accepts:
N/A

returns:
N/A

The XMLDoc objects source property represents the *original* source XML for the object. This property is *not* updated by the dom manipulation functions.

Example:
xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<TAG1>"
+ "value"
+ "</TAG1>"
+ "</ROOT>";
var objDom = new XMLDoc(xml, xmlError)
alert(objDom.source);
XMLDoc/XMLNode Object - selectNode method

objDOM.selectNode(<search string>)
objNODE.selectNode(<search string>)

accepts:
<search string>: the tag path search string

returns:
NODE object (if node found) or null if not found

XML for <SCRIPT> tagPath searching allows JavaScript developers who know the layout and structure of their XML documents easy access to the nodes in their XML Dom. The format of the search criteria is similar to that of XPath. Consider the following code:

var xml = "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "<TAG2>"
+ "hello"
+ "</TAG2>"
+ "<TAG2 id="foo">"
+ "hello 2"
+ "</TAG2>"
+ "</TAG1>"
+ "</ROOTNODE>";

var objDom = new XMLDoc(xml, xmlError);
//show the text of the first TAG2 node
var domTree = objDom.docNode;
alert(domTree.getElements("TAG1")[0].getElements("TAG2")[0].getText());


The code to get the node text in the example above is rather straightforward, but is large and can be cumbersome. XML for <SCRIPT> tagPath searching makes this much easier. Consider the following code, which is equivalent to the sample code above:

var xml = "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "<TAG2>"
+ "hello"
+ "</TAG2>"
+ "<TAG2 id="foo">"
+ "hello 2"
+ "</TAG2>"
+ "</TAG1>"
+ "</ROOTNODE>";

var objDom = new XMLDoc(xml, xmlError);
//show the text of the first TAG2 node
alert(objDom.selectNode("/TAG1/TAG2[0]").getText());


tagPath searching allows JavaScript developers to specify which node they wish to select by passing in a well-formed search string. This search string is formatted according to the following rules:

"/" at the start of the string denotes the root node. This root node would be either the current NODE object (when called from another NODE object) or the root node of the DOC object (when called from a DOC object) as shown above.

Nodes may be selected according to the following rules:
  • By Name: /tag1/tag2
  • By Name and zero-based position: /tag1/tag2[0]
  • Globally: /* (i.e. select all nodes in this position)
  • Via attributes: /tag1/tag2[@id="foo"]
  • Any combinations of the above:

Only one search attribute is allowed in any attribute ([@<attribute>=",<value>"]) search. However, multiple attribute searches are allowed for a single node (/node[@<attribute1>=",<value>"][@<attribute2>=",<value>"]).

For more information on XML for <SCRIPT>s tagPath capabilities, you are encouraged to inspect the DOM test suite and the DOM tagPath sample application source code.

You can view an interactive demo of the tagPath capabilities by viewing the DOM tagPath sample application. This sample application is located in the "Sample Code (Parsers)" section of the website.

XMLDoc/XMLNode Object - selectNodeText method

objDOM.selectNodeText(<search string>)
objNODE.selectNodeText(<search string>)

accepts:
<search string>: the tag path search string

returns:
String of the node's text value (if found) or null if not found

The return string of this function is the exact same string that would be returned if the NODE object method getText() was invoked on a NODE returned from a selectNode call.

Node Object - Constructor

var objNode = new XMLNode(<node type>, <doc>,<str>)

accepts:
<nodeType>: indicates the node type of the node
<doc>: contains a reference to the XMLDoc object describing the document
<str>: contains the text for the tag or text entity

returns:
new XMLNode object

It is uncommon for anyone but the parser itself to create new XMLNode objects. When creating new node objects in code for dom manipulation, it is recommended that you use the createXMLNode method of the XMLDoc object. However, it is possible to create your own nodes should the need arise.

The available node types are TEXT, COMMENT, ELEMENT and CDATA. These should be passed as text in upper-case to the constructor.

Example:
var xml;
xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "Hello World"
+ "</TAG1>"
+ "</ROOTNODE>";
//instantiate a new XMLDoc object.
var objDom = new XMLDoc(xml, xmlError)
var objNode = new XMLNode("TEXT", objDom, "<TAG1>value</TAG1>")
Node Object - addAttribute method

objNode.addAttribute(<attribute name>, <attribute value>)

accepts:
<attribute name>: the name of the new attribute
<attribute value>: the value of the new attribute

returns:
N/A

addAttribute will add an attribute to the node object. This addition will also be reflected in the node's XMLDoc object as well.

If the attribute name passed in already exists for the node, the old value will be removed and replaced with the new value.

For example, adding an attribute of name "name" and value "value" to <TAG1> in the following XML will yield:

Before:
<ROOT>
<REFNC>
<TAG1>
value
</TAG1>
</REFNC>
</ROOT>

After:
<ROOT>
<REFNC>
<TAG1 name="value">
value
</TAG1>
</REFNC>
</ROOT>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "foo"
+ "</TAG1>"
+ "</ROOTNODE>";
var objDom = new XMLDoc(, xmlError);
//first find the node to add the attribute to, in this case, TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//now add the attribute
referenceNode.addAttribute("attribute", "attributeValue");

See also: domManipulationTestFive in domTestSuite.js

Node Object - getAttribute method

objNode.getAttribute(<attribute name>)

accepts:
<attribute name>: the name of the new attribute

returns:
attribute value: if name is found
null: if name is not found

getAttribute's <attribute name> parameter is case sensitive.

For example, getting the "id" attribute from <TAG1> in the following XML will yield:

XML:
<ROOT>
<REFNC>
<TAG1 id="value">
hello
</TAG1>
</REFNC>
</ROOT>

Result:
"value"

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<TAG1 id="hello" >"
+ "</TAG1>"
+ "</ROOT>";
var objDom = new XMLDoc(, xmlError);
//first find the node to get an attribute from, in this case, TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//now get the attribute
var attributeValue = referenceNode.getAttribute("id");

See also: domManipulationTestNine in domTestSuite.js

Node Object - getAttributeNames method

objNode.getAttributeNames()

accepts:
N/A

returns:
Array of attribute Names for the node

getAttributeNames will return an empty array if there are no attributes for the node.

For example, getting the attribute names from <TAG1> in the following XML will yield:

XML:
<ROOT>
<REFNC>
<TAG1 id="value" hxy="2" >
</TAG1>
</REFNC>
</ROOT>

Result:
Array[0] = "id"
Array[1] = "hxy"

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<TAG1 id="hello" >"
+ "</TAG1>"
+ "</ROOT>";
var objDom = new XMLDoc(xml, xmlError);
//first find the node to get attributes from, in this case, TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//now get the attributes
var attributes = referenceNode.getAttributes();

See also: domManipulationTestEight in domTestSuite.js

Node Object - getElementById method

objNode.getElementById(<element's id attribute value>)

accepts:
<element's id attribute value>: the id attribute value of a node to search for

returns:
XMLNode object: if id is found
null: if id is not found

If there is more than one node in the XML with the same ID, the parser will return the first node found, searching top to bottom beginning at the node calling getElementById.

For example, getting the element of id 4 from in the following XML will yield:

XML:
<ROOT>
<REFNC>
<TAG1 id="4">
value
</TAG1>
</REFNC>
</ROOT>

Result:
The node object representing <TAG1 id="4">value</TAG1>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<REFNC>"
+ "<TAG1 id="4">"
+ "value"
+ "</TAG1>"
+ "</REFNC>"
+ "</ROOT>";
var objDom = new XMLDoc(, xmlError);
//get the root node and then search for the node with id=4
var domTree = objDom.docNode;
var searchNode = domTree.getElementById("4");

See also: getElementByIdTestOne in domTestSuite.js

Node Object - getElements method

objNode.getElements(|tag name|)

accepts:
|tag name|: optional element name to filter on.

returns:
Array of XMLNode objects: if any are found matching the filter criteria

If no tag name filter is passed to the method, getElements will return all of the elements under the node. If a tag name filter is specified, only those tags whos tag name matches that filter will be returned. An empty array will be returned if there are no tags under the node or if no tag names under the node match the tag name filter passed in.

For example, calling getElements("TAG1") from the <REFNC> node in the following XML will yield:

XML:
<ROOT>
<REFNC>
<TAG1>
value
</TAG1>
<TAG2>
value
</TAG2>
</REFNC>
</ROOT>

Result:
Array[0]: node object representing <TAG1>value</TAG1>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<TAG1 id="hello" >"
+ "</TAG1>"
+ "</ROOT>";
var objDom = new XMLDoc(xml, xmlError);
//find the first TAG1 node
var domTree = objDom.docNode;
var firstTag1Node = domTree.getElements("TAG1")[0];
Node Object - getText method

objNode.getText()

accepts:
N/A

returns:
The text value of the node with the escape values converted to their real value for TEXT and COMMENT nodes.

Generally, getText is called on a node at the bottom of the tree to get the text value out of it. Calling getText on a node with node elements under it will return the text value of those nodes as well.

Sometimes putting your XML in HTML can cause extra spaces to be inserted into your text. Since XML for <SCRIPT> tries to retain these spaces, you may want to trim the retults of getText() to your liking.

For example, calling getText() from the <TAG1> node in the following XML will yield:

XML:
<ROOT>
<REFNC>
<TAG1>
value
</TAG1>
<TAG2>
value
</TAG2>
</REFNC>
</ROOT>

Result:
"value"

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<TAG1 id=\"hello\" >"
+ "</TAG1>"
+ "</ROOT>";
var objDom = new XMLDoc(xml, xmlError);
//find the first TAG1 node
var domTree = objDom.docNode;
var firstTag1Node = domTree.getElements("TAG1")[0];
alert(firstTag1Node.getText());
Node Object - getParent method

objNode.getParent()

accepts:
N/A

returns:
The parent XMLNode object to the node

For example, calling getParent() from the <TAG1> node in the following XML will yield:

XML:
<ROOT>
<REFNC>
<TAG1>
value
</TAG1>
<TAG2>
value
</TAG2>
</REFNC>
</ROOT>

Result:
The XMLNode object representing
<REFNC>
<TAG1>
value
</TAG1>
<TAG2>
value
</TAG2>
</REFNC>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1>"
+ "foo"
+ "</TAG1>"
+ "</ROOTNODE>";
var objDom = new XMLDoc(, xmlError);
//first find the node to find the parent of, in this case TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
var elementParent = referenceNode.getParent();

See also: domManipulationTestEleven in domTestSuite.js

Node Object - getUnderlyingXMLText method

objNode.getUnderlyingXMLText()

accepts:
N/A

returns:
string: The current XML representation of the XMLNode object omitting processing instructions and DTD's. Also, this function turns any <TAG/> tags into <TAG></TAG>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<FOO>"
+ "<BAR>"
+ "hello"
+ "</BAR>"
+ "</FOO>";
var objDom = new XMLDoc(xml, xmlError);
var domTree = objDom.docNode;
var node = domTree.getElements("FOO")[0];
alert(node.getUnderlyingXMLText());

See also: underlyingXMLFunctionsTestTwo in domTestSuite.js

Node Object - nodeType property

objNode.nodeType

accepts:
N/A

returns:
string: The node type of the node.

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<FOO>"
+ "<BAR>"
+ "hello"
+ "</BAR>"
+ "</FOO>";
var objDom = new XMLDoc(xml, xmlError);
var domTree = objDom.docNode;
var node = domTree.getElements("FOO")[0];
alert(node.nodeType);

See also: nodeTypeTestOne, nodeTypeTestTwo, nodeTypeTestThree and nodeTypeTestFour in domTestSuite.js

Node Object - removeAttribute method

objNode.removeAttribute(<attribute name>)

accepts:
<attribute name>: the name of the attribute to remove

returns:
N/A

removeAttribute will remove an attribute to the node object. This subtraction will also be reflected in the node's XMLDoc object as well.

For example, remove an attribute of name "name" from <TAG1> in the following XML will yield:

Before:
<ROOT>
<REFNC>
<TAG1 name="value">
hello
</TAG1>
</REFNC>
</ROOT>

After:
<ROOT>
<REFNC>
<TAG1>
value
</TAG1>
</REFNC>
</ROOT>

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1 id=\"3\">"
+ "foo"
+ "</TAG1>"
+ "</ROOTNODE>";
var objDom = new XMLDoc(, xmlError);
//first find a node to remove an attribute from, in this case, TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//now remove the attribute
referenceNode.removeAttribute("id");

See also: domManipulationTestSeven in domTestSuite.js

Node Object - tagName property

objNode.tagName

accepts:
N/A

returns:
N/A

The tagName property returns the tag name (without any attributes) of the node.

For example, calling tagName from the <TAG1> node in the following XML will yield:

XML:
<ROOT>
<REFNC>
<TAG1 name="value">
hello
</TAG1>
</REFNC>
</ROOT>

Result:
"TAG1"

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1 id=\"3\">"
+ "foo"
+ "</TAG1>"
+ "</ROOTNODE>";
var objDom = new XMLDoc(xml, xmlError);
//first find the node for to get a tag name from , in this case, TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//now get the tag name
alert(referenceNode.tagName);

See also: domManipulationTestEleven, domManipulationTestTen and getElementByIdTestOne in domTestSuite.js

Node Object - toString method

objNode.toString()

accepts:
N/A

returns:
N/A

The toString method produces a diagnostic string description of a the node.

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOTNODE>"
+ "<TAG1 id=\"3\">"
+ "foo"
+ "</TAG1>"
+ "</ROOTNODE>";
var objDom = new XMLDoc(xml, xmlError);
//first find the node for which we want to call toString, in this case it is TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//now get the tag name
alert(referenceNode.toString());
Convenience Functions - convertEscapes function

convertEscapes(<string>)

accepts:
<string>: string with escaped characters (i.e. "&lt;")

returns:
string with unescaped characters (i.e. "<")

Characters such as less-than signs, greater-than signs and ampersands are illegal in XML syntax and must be escaped before being inserted into the DOM. This function is a convience function to take those escaped characters and return them to their original values for processing outside the parser.

XML for <SCRIPT> will automagically convert the content of the XML elements to their non-escaped values when xmlNode.getText() is called for every element except CDATA.

Examples:
&amp; == &
&lt; == <
&gt; == >
Convenience Functions - convertToEscapes function

convertToEscapes(<string>)

accepts:
<string>: string with unescaped characters (i.e. "<")

returns:
string with escaped characters (i.e. "&lt;")

Characters such as less-than signs, greater-than signs and ampersands are illegal in XML syntax. This function is a convience function to escape those characters out to there legal values.

Users of XML for <SCRIPT> should call this function any time they are performing dom manipulation by adding new nodes consisting of user-generated text with the exception of CDATA type nodes. While XML for <SCRIPT>'s Classic DOM Parser is generally rather loose with what it will allow in text, many other parsers are not (including XML for <SCRIPT>'s W3C DOM Parser) and will generate an error if one of these characters is unescaped.

Examples:
< == &lt;
> == &gt;
& == &amp;

Example:
var xml = ""
+ "<?xml version=\"1.0\"?>"
+ "<ROOT>"
+ "<TAG1>"
+ "<TAG3>"
+ "value"
+ "</TAG3>"
+ "</TAG1>"
+ "</ROOT>";
var objDom = new XMLDoc(xml, xmlError);
//first find the node that we want to insert into, in this case it is TAG1
var domTree = objDom.docNode;
var referenceNode = domTree.getElements("TAG1")[0];
//get a value input by the user in an HTML form
var userValue = document.getElementById("inputDescription").value;
//convert to escapes to make sure all XML is valid
userValue = convertToEscapes(userValue);
//create the new node
var newNode = objDom.createXMLNode("<DESC>" + userValue + "</DESC>");
//now add it to the tree
objDom = objDom.insertNodeInto(referenceNode, newNode);

See also: cmdSaveClicked in formFunctions.js

Convenience Functions - trim function

trim(<string>, |trim left true|false |, |trim right |true|false |)

accepts:
<string>: string to be trimmed
|trim left|: (optional) trim the left side of the string
|trim right|: (optional) trim the right side of the string

returns:
string trimmed as desired.

In the trim function, trim left and trim right default to "true" if not passed in.