Вы находитесь на странице: 1из 44

Working with the XML Document Object Model

Objectives
In this lesson, you will learn to:
☛ Identify the need for XML Document Object Model
(DOM)
☛ Use the following XML DOM objects to access
different parts of an XML document:
✓ DOMDocument
✓ IXMLDOMNode
✓ IXMLDOMNodeList
✓ IXMLDOMParseError

©NIIT eXtensible Markup Language/Lesson 7/Slide 1 of 43


Working with the XML Document Object Model

The XML Document Object Model


☛ The Document Object Model (DOM) defines the
logical structure of documents and the way a
document is accessed and manipulated. It provides an
Application Programming Interface (API) for XML and
HTML documents.
☛ XML DOM views an XML document as being
composed of objects. Each object has properties and
behavior that can be manipulated using the methods
provided by a DOM interface.

©NIIT eXtensible Markup Language/Lesson 7/Slide 2 of 43


Working with the XML Document Object Model

The XML Document Object Model (Contd.)


☛ Using XML DOM, programmers can create and build
XML documents, navigate the structure of documents,
and add, modify, or delete elements and their content.
☛ The objects and methods provided by XML DOM can
be used with any programming language, such as
Java, C++, and Visual Basic. These objects can also
be used with scripting languages, such as VBScript
and JavaScript.
☛ To be able to use the features of XML DOM, you need
to use a DOM-enabled parser.

©NIIT eXtensible Markup Language/Lesson 7/Slide 3 of 43


Working with the XML Document Object Model

The XML Document Object Model (Contd.)


☛ A DOM-enabled parser reads an XML document and
parses it to ensure that it is a valid document. Then, it
creates an in-memory representation of the XML
document by organizing its contents in a logical tree-
structure. The tree-structure is made up of nodes.
☛ MSXML is an example of a DOM-enabled XML parser.

©NIIT eXtensible Markup Language/Lesson 7/Slide 4 of 43


Working with the XML Document Object Model

Implementation of DOM in the MSXML Parser


☛ When the MSXML parser loads an XML document, it
reads the document and creates a tree structure that
represents the various components of the XML
document.

©NIIT eXtensible Markup Language/Lesson 7/Slide 5 of 43


Working with the XML Document Object Model

Implementation of DOM in the MSXML Parser


(Contd.)
☛ The following diagram depicts how DOM allows
applications to access information stored in XML
documents:
MSXML Library

XML DOM Tree


Document Parser Root Application
Parsed Child
Document text
Child
text

©NIIT eXtensible Markup Language/Lesson 7/Slide 6 of 43


Working with the XML Document Object Model

Tree structure of a Document


☛ The basic building block of the tree structure is the
node.
☛ Nodes are generic containers that hold information
about the elements, attributes, content, comments,
and processing instructions that are stored in an XML
document.
☛ The XML document can be viewed as a single node
that contains all the other nodes.

©NIIT eXtensible Markup Language/Lesson 7/Slide 7 of 43


Working with the XML Document Object Model

Tree structure of a Document


☛ The root element of the XML document is represented
as the root node of the corresponding DOM
tree‑structure.
☛ Every component of the XML document is
represented as a node in the DOM tree-structure.
☛ Each node has a name, type, and value associated
with it. The name of the node is the name of the
component with which the node is associated. The
type of the node depends on the type of the
component it represents.
☛ DOM treats each of these nodes as objects.
Therefore, it is possible to create a script that loads an
XML document, traverses through all nodes, and
displays the required information to the user.
©NIIT eXtensible Markup Language/Lesson 7/Slide 8 of 43
Working with the XML Document Object Model

XML DOM Objects and Methods


☛ The main objects and methods provided by XML DOM
that enable you to traverse, read, and manipulate the
structure and content of an XML document are listed
below:
✓ The DOMDocument object
✓ The IXMLDOMNode object
✓ The IXMLDOMNodeList object
✓ The IXMLDOMParseError object

©NIIT eXtensible Markup Language/Lesson 7/Slide 9 of 43


Working with the XML Document Object Model

The DOMDocument object


☛ The DOMDocument object is the top-level object in
XML DOM. It implements all the basic DOM methods
required to work with an XML document. It also has
methods, which support XSLT.
☛ This object is associated with various methods that
help you navigate, query, and modify the content and
the structure of an XML document.

©NIIT eXtensible Markup Language/Lesson 7/Slide 10 of 43


Working with the XML Document Object Model

The DOMDocument object (Contd.)


☛ Some of the most commonly used methods of the
DOMDocument object are:
✓ createElement(elementname): Creates an element
node.
✓ createAttribute(attributename): Creates an attribute
node.
✓ CreateNode(type, name, namespace-URI): Creates
a node of the specified type. Also supports
namespace URI.
✓ getElementsByTagName(elementname): Returns a
collection of element nodes that have the specified
element name.
©NIIT eXtensible Markup Language/Lesson 7/Slide 11 of 43
Working with the XML Document Object Model

The DOMDocument object (Contd.)


✓ load(XMLdocument): Loads the specified XML
document.
✓ appendChild(child node): Appends the specified
child node to the document.
✓ save(destination): Saves the XML document
represented by the DOMDocument object at the
specified destination.
☛ Some of the commonly used properties of the
DOMDocument object are:
✓ async: Allows you to specify whether the XML
document can be loaded asynchronously.
✓ childNodes: Returns a list of child nodes.
✓ firstChild: Returns the first child in the document.
©NIIT eXtensible Markup Language/Lesson 7/Slide 12 of 43
Working with the XML Document Object Model

The DOMDocument object (Contd.)


✓readyState: Returns the information about the
state of the XML document (loading, loaded,
interactive, complete).
✓parseError: Returns an object of
IXMLDOMParseError, which can be used to
retrieve error information.
✓xml: Returns the XML representation of a
node.
✓validateOnParse: Specifies whether the parser
should check for validity of an XML document.

©NIIT eXtensible Markup Language/Lesson 7/Slide 13 of 43


Working with the XML Document Object Model

Creating a DomDocument object


☛ The following is the code segment written using
JavaScript to create an instance of the DOMDocument
object:
var myxmldoc = new
ActiveXObject("Msxml2.DOMDocument.4.0");
☛ A reference to the newly created object is stored in
the variable myxmldoc, which can be used to load
and manipulate XML documents.

©NIIT eXtensible Markup Language/Lesson 7/Slide 14 of 43


Working with the XML Document Object Model

Loading an XML file


☛ To load an XML file by using a URL, you can write the
following code in JavaScript :
myxmldoc.load("http://www.sb.com/
employee.xml");
☛ The load() method can also be used to load a file
from the local host by providing the path, as shown in
the following example:

myxmldoc.load("c:\examples\employees.xml
");

©NIIT eXtensible Markup Language/Lesson 7/Slide 15 of 43


Working with the XML Document Object Model

Loading an XML file (Contd.)


☛ To load an XML document synchronously, you can
write the following code in JavaScript:
var myxmldoc = new
ActiveXObject("Msxml2.DOMDocument.4.0");
myxmldoc.async=false;
myxmldoc.load("employee.xml");

©NIIT eXtensible Markup Language/Lesson 7/Slide 16 of 43


Working with the XML Document Object Model

Using the readyState Property


☛ To check if the document has been loaded
completely, you can use the readyState property.
The readyState property holds a numeric value,
which represents one of the following states:
✓ LOADING (1): This state indicates that the loading
process is in progress and data is not yet parsed.
✓ LOADED (2): This state indicates that data has
been read and parsed but the object model is not
yet ready.

©NIIT eXtensible Markup Language/Lesson 7/Slide 17 of 43


Working with the XML Document Object Model

Using the readyState Property (Contd.)


✓ INTERACTIVE (3): This state indicates that the object
model is available with partially retrieved data set and
is in the read-only mode.
✓ COMPLETED (4): This state indicates that the
loading process is complete.

©NIIT eXtensible Markup Language/Lesson 7/Slide 18 of 43


Working with the XML Document Object Model

Creating a New Node


☛ You can create a new node by using the
createNode() method.
☛ The following is the code segment to create a root
element by using the createNode() method:
var myxmldoc = new
ActiveXObject("Msxml2.DOMDocument.4.0");
if (myxmldoc.childnodes.length==0)
{

myroot=myxmldoc.createNode(1,"ORDERDETAI
LS"," ");
myxmldoc.appendChild(myroot);
myxmldoc.save(myxmldoc.XMLDocument);
}
©NIIT eXtensible Markup Language/Lesson 7/Slide 19 of 43
Working with the XML Document Object Model

Creating New Elements


☛ You can create new elements for the document by
using the createElement() method of the
myxmldoc DOMDocument object. The
createElement() method takes one parameter, the
name of the element that is to be created.
☛ The following example creates a new element node
called “salary”:
var xmlelement;
xmlelement=myxmldoc.createElement
("salary");

©NIIT eXtensible Markup Language/Lesson 7/Slide 20 of 43


Working with the XML Document Object Model

Accessing Elements From an XML File


☛ To access the elements from an XML document, you
can begin at the root element and navigate through the
document tree. You can also query for a specific node
or nodes.
☛ To reach a particular node or nodes within the
document tree structure, you can use the
getElementsByTagName() method.

©NIIT eXtensible Markup Language/Lesson 7/Slide 21 of 43


Working with the XML Document Object Model

The IXMLDOMNode object


☛ The IXMLDOMNode object represents a node in the
XML document tree structure.
☛ The node could be an element that contains child
elements.
☛ The IXMLDOMNode object provides methods to work
with child elements.
☛ Some commonly used methods of the IXMLDOMNode
object are:
✓ appendChild(newchild): Appends a new child to
the node.
✓ insertBefore(newNode, refNode): Inserts a new
node before the specified node.
✓ removeChild(nodeName): Removes the specified
node.
©NIIT eXtensible Markup Language/Lesson 7/Slide 22 of 43
Working with the XML Document Object Model

The IXMLDOMNode object (Contd.)


✓ replaceChild(newNode, oldNode): Replaces the
oldNode with newNode.
✓ hasChildNodes(): Specifies whether the node has
child nodes.
✓ cloneNode(boolean): Creates a clone of the node
represented by the IXMLDOMNode object.
☛Some of the commonly used properties of the
IXMLDOMNode object are:
✓ nodeName: Returns the name of the node.
✓ nodeType: Specifies the type of the node.
✓ nodeValue: Returns the text contained in the node.
✓ childNodes: Returns the child nodes of the node.
©NIIT eXtensible Markup Language/Lesson 7/Slide 23 of 43
Working with the XML Document Object Model

The IXMLDOMNode object (Contd.)


✓ firstChild: Returns the first child of the node.
✓ lastChild: Returns the last child of the node.
✓ text: Returns the text contained in the node.
✓ xml: Returns the XML code for the node.

©NIIT eXtensible Markup Language/Lesson 7/Slide 24 of 43


Working with the XML Document Object Model

Accessing Text Values of Elements


☛ The text enclosed within the tags in an XML file is
used as a node value in DOM. A node value can be
the value of an attribute or the text within an element.
☛ You can display the text within the elements or
attributes by using the text property, as shown
below:
alert(myelement.text);
☛ You can also set the value of an element by using this
property, as shown in the example given below:
myelement.text=“Barbie Doll”;

©NIIT eXtensible Markup Language/Lesson 7/Slide 25 of 43


Working with the XML Document Object Model

Appending a New Child Node


☛ The following code segment creates a new element
by using the createElement() method of the
DOMDocument object. Then, it appends the newly
created node to the last child of myelement by using
the appendchild() method:
var myelement=myxmldoc.documentElement;
var newElement=myxmldoc.createElement
("lastchild");
myelement.appendChild(newElement);

©NIIT eXtensible Markup Language/Lesson 7/Slide 26 of 43


Working with the XML Document Object Model

Inserting a Node Before Two Existing Nodes


☛ The following code segment creates a new element
called department and replaces and existing node
with the new element:
var newElement= myxmldoc.createElement
("department");
var
oldElement=myxmldoc.documentElement.chil
dNodes.item(0).firstChild;

myxmldoc.documentElement.childNodes.item
(1).insertBefore(newElement,
oldElement);
©NIIT eXtensible Markup Language/Lesson 7/Slide 27 of 43
Working with the XML Document Object Model

Removing a Child Node


☛ The following code segment removes a child node by
using the removeChild() method:
var
oldElement=myxmldoc.documentElement.chi
ldNodes.item(0).firstChild;

myxmldoc.documentElement.childNodes.ite
m(0).RemoveChild(oldElement);

©NIIT eXtensible Markup Language/Lesson 7/Slide 28 of 43


Working with the XML Document Object Model

Replacing a Node (Contd.)


☛ In the following example, the second element in the
document is replaced with the new element named
department:
Var newElement=
myxmldoc.createElement("department");
Var
oldElement=myxmldoc.documentElement.chil
dNodes.item(0).firstChild;
myxmldoc.documentElement.childNodes.item(1
).replaceChild(newElement, oldElement);

©NIIT eXtensible Markup Language/Lesson 7/Slide 29 of 43


Working with the XML Document Object Model

The IXMLDOMNodeList object


☛ The IXMLDOMNodeList object enables you to iterate
through a collection of nodes.
☛ Some methods of the IXMLDOMNodeList object are:
✓ item(number):Returns the node at the position
indicated by the specified number.
✓ nextNode(): Returns the next node in the list.
☛ To obtain the length of the node list, use the length
property. The length property can also be used to
traverse through the list of child nodes.

©NIIT eXtensible Markup Language/Lesson 7/Slide 30 of 43


Working with the XML Document Object Model

The IXMLDOMNodeList object (Contd.)


☛ The following code traverses through the child nodes
of myelement:
var
myelement=myxmlDoc.getElementsByTagName(
"emp");
for(i=0;i< myelement.length –1;i++)
alert(myelement.item(i).xml);

©NIIT eXtensible Markup Language/Lesson 7/Slide 31 of 43


Working with the XML Document Object Model

The IXMLDOMParseError Object


☛ The IXMLDOMParseError object returns information
about the most recent parse error.
☛ The IXMLDOMParseError object provides properties
to retrieve information, such as the error code, the
error text, and the line that caused the error.

©NIIT eXtensible Markup Language/Lesson 7/Slide 32 of 43


Working with the XML Document Object Model

The IXMLDOMParseError Object (Contd.)


☛The properties of the IXMLDOMParseError
object are:
✓ errorCode: Returns the error code.
✓ reason: Returns a string explaining the reason
for the error.
✓ line: Returns the line number where the error
occurred.
✓ linePos: Returns the position in the line where
the error occurred.
✓ srcText: Returns a string containing the line
that caused the error.
©NIIT eXtensible Markup Language/Lesson 7/Slide 33 of 43
Working with the XML Document Object Model

Using the IXMLDOMParseError object


☛ You can use the IXMLDOMParseError object to
display information about the errors that are
encountered while parsing an XML document.
☛ Consider the following example:
var prodxml = new
ActiveXObject("Msxml2.DOMDocument.4.0");
prodxml.async = false;
prodxml.load("product.xml");
if (prodxml.parseError.errorCode != 0)
{ alert("A parse error occurred.");}
else
{alert(prodxml.documentElement.xml);}
©NIIT eXtensible Markup Language/Lesson 7/Slide 34 of 43
Working with the XML Document Object Model

Problem Statement 7.D.1


☛ The product details of CyberShoppe are stored in an
XML document. The structure of the XML document is
defined in a DTD. The data held in the XML document
must be validated against the rules specified for the
data store.

©NIIT eXtensible Markup Language/Lesson 7/Slide 35 of 43


Working with the XML Document Object Model

Task List
☛ Identify a mechanism to access an XML document
programmatically.
☛ Identify the objects required to access the XML
document.
☛ Write the code to access the document.
☛ Execute the code.

©NIIT eXtensible Markup Language/Lesson 7/Slide 36 of 43


Working with the XML Document Object Model

Task 1: Identify a mechanism to access an XML


document programmatically.
Result:
☛ The contents of an XML document can be accessed
and manipulated from any application by using XML
DOM. Therefore, to access an XML document
programmatically, the best solution is to use XML
DOM. Applications developed using VBScript,
JavaScript, C/C++, or Visual Basic can use XML DOM
objects.

©NIIT eXtensible Markup Language/Lesson 7/Slide 37 of 43


Working with the XML Document Object Model

Task 2: Identify the objects required to access


the XML document.
Result:
☛ You can validate the contents of an XML document
against a DTD by using the following XML DOM
objects:
✓ DOMDocument
✓ IXMLDOMParseError

©NIIT eXtensible Markup Language/Lesson 7/Slide 38 of 43


Working with the XML Document Object Model

Task 3: Write the code to access the document


☛ To write a script that validates an XML document
against the DTD, you need to follow the steps given
below:
✓ Create the user interface for accepting the XML file
name.
✓ Write the script to load the named XML document.
✓ Write the script to validate the XML document
against the DTD.

©NIIT eXtensible Markup Language/Lesson 7/Slide 39 of 43


Working with the XML Document Object Model

Task 4: Execute the script

©NIIT eXtensible Markup Language/Lesson 7/Slide 40 of 43


Working with the XML Document Object Model

Just a Minute…
☛ The details about products sold at CyberShoppe are
stored in an XML document called product.xml. Write
the code to display the price of all products by using
DOM objects.

©NIIT eXtensible Markup Language/Lesson 7/Slide 41 of 43


Working with the XML Document Object Model

Summary
In this lesson, you learned that:
☛ DOM is an application programming interface that
enables an application to access the contents of an
XML document.
☛ DOM objects enable you to access and manipulate
XML documents.
☛ When the MSXML parser loads an XML document, it
creates a tree structure that represents the various
components of the XML document.

©NIIT eXtensible Markup Language/Lesson 7/Slide 42 of 43


Working with the XML Document Object Model

Summary (Contd.)
☛ The basic building block of the tree structure is a
node. A node is a container that holds information
about the elements, attributes, and content stored in
an XML document.
☛ Some XML DOM objects that are used to manipulate
data in a document are:
✓ DOMDocument
✓ IXMLDOMNode
✓ IXMLDOMNodeList
✓ IXMLDOMParseError

©NIIT eXtensible Markup Language/Lesson 7/Slide 43 of 43


Working with the XML Document Object Model

Summary (Contd.)
☛ The DOMDocument object is the top-level object in
XML DOM. This object provides various properties
and methods that help you to navigate, query, and
modify the content and structure of XML documents.
☛ The IXMLDOMNode object represents a node in the
XML document structure. This object provides
methods to work with child elements.
☛ The IXMLDOMNodeList object enables you to iterate
through a collection of nodes.
☛ The IXMLDOMParseError object returns information
about the most recent error.

©NIIT eXtensible Markup Language/Lesson 7/Slide 44 of 43

Вам также может понравиться