How to Create a DOM tree: Difference between revisions

From MozillaZine Knowledge Base
Jump to navigationJump to search
(initial)
 
No edit summary
Line 1: Line 1:
This page describes Javascript interfaces, that can be used to create and modify DOM, supported by all Gecko-based applications (such as Firefox) both in priviledged (extensions) and unpriviledged (web pages) code.
==Dynamically creating a DOM tree==
Consider the following XML document:
Consider the following XML document:


Line 73: Line 76:


==So What?==
==So What?==
DOM trees can be [[Dev : Extensions : Example Code : Using XPath to query a DOM object | queried using XPath expressions]], converted to strings using [[Reading and Writing XML to and from DOM trees | XMLSerializer]], written to a local or remote files using [[Reading and Writing XML to and from DOM trees | XMLSerializer]] (without having to first convert to a string), [[Using XMLHttpRequest | POSTed to a web server]], transformed using XSLT, XLink'd to, etc.
DOM trees can be [[Dev : Extensions : Example Code : Using XPath to query a DOM object | queried using XPath expressions]], converted to strings using [[Reading and Writing XML to and from DOM trees | XMLSerializer]], written to a local or remote files using [[Reading and Writing XML to and from DOM trees | XMLSerializer]] (without having to first convert to a string), [[Using XMLHttpRequest | POSTed to a web server]], transformed using [[XSLT]], [[XLink]]'d to, etc.




You can use DOM trees to model data which isn't well-suited for RDF (or perhaps you just don't like RDF). Another application is that, since XUL is XML, the UI of your application can be dynamically manipulated, downloaded, uploaded, saved, loaded, converted, or transformed quite easily.
You can use DOM trees to model data which isn't well-suited for RDF (or perhaps you just don't like RDF). Another application is that, since XUL is XML, the UI of your application can be dynamically manipulated, downloaded, uploaded, saved, loaded, converted, or transformed quite easily.
[[Category:Example code]] [[Category:XML]]

Revision as of 12:39, 10 March 2005

This page describes Javascript interfaces, that can be used to create and modify DOM, supported by all Gecko-based applications (such as Firefox) both in priviledged (extensions) and unpriviledged (web pages) code.

Dynamically creating a DOM tree

Consider the following XML document:

<?xml version="1.0"?>
<people>
  <person first-name="eric" middle-initial="H" last-name="jung">
    <address street="321 south st" city="denver" state="co" country="usa"/>
    <address street="123 main st" city="arlington" state="ma" country="usa"/>
  </person>

  <person first-name="jed" last-name="brown">
    <address street="321 north st" city="atlanta" state="ga" country="usa"/>
    <address street="123 west st" city="seattle" state="wa" country="usa"/>
    <address street="321 south avenue" city="denver" state="co" country="usa"/>
  </person>
</people>

The W3C DOM API, supported by Mozilla, can be used to create an in-memory representation of this document like so:

var doc = document.implementation.createDocument("", "", null);
var peopleElem = doc.createElement("people");

var personElem1 = doc.createElement("person");
personElem1.setAttribute("first-name", "eric");
personElem1.setAttribute("middle-initial", "h");
personElem1.setAttribute("last-name", "jung");

var addressElem1 = doc.createElement("address");
addressElem1.setAttribute("street", "321 south st");
addressElem1.setAttribute("city", "denver");
addressElem1.setAttribute("state", "co");
addressElem1.setAttribute("country", "usa");
personElem1.appendChild(addressElem1);

var addressElem2 = doc.createElement("address");
addressElem2.setAttribute("street", "123 main st");
addressElem2.setAttribute("city", "arlington");
addressElem2.setAttribute("state", "ma");
addressElem2.setAttribute("country", "usa");
personElem1.appendChild(addressElem2);

var personElem2 = doc.createElement("person");
personElem2.setAttribute("first-name", "jed");
personElem2.setAttribute("last-name", "brown");

var addressElem3 = doc.createElement("address");
addressElem3.setAttribute("street", "321 north st");
addressElem3.setAttribute("city", "atlanta");
addressElem3.setAttribute("state", "ga");
addressElem3.setAttribute("country", "usa");
personElem2.appendChild(addressElem3);

var addressElem4 = doc.createElement("address");
addressElem4.setAttribute("street", "123 west st");
addressElem4.setAttribute("city", "seattle");
addressElem4.setAttribute("state", "wa");
addressElem4.setAttribute("country", "usa");
personElem2.appendChild(addressElem4);

var addressElem5 = doc.createElement("address");
addressElem5.setAttribute("street", "321 south avenue");
addressElem5.setAttribute("city", "denver");
addressElem5.setAttribute("state", "co");
addressElem5.setAttribute("country", "usa");
personElem2.appendChild(addressElem5);

peopleElem.appendChild(personElem1);
peopleElem.appendChild(personElem2);
doc.appendChild(peopleElem);

So What?

DOM trees can be queried using XPath expressions, converted to strings using XMLSerializer, written to a local or remote files using XMLSerializer (without having to first convert to a string), POSTed to a web server, transformed using XSLT, XLink'd to, etc.


You can use DOM trees to model data which isn't well-suited for RDF (or perhaps you just don't like RDF). Another application is that, since XUL is XML, the UI of your application can be dynamically manipulated, downloaded, uploaded, saved, loaded, converted, or transformed quite easily.