/**************************************************
            DOM学习
**************************************************/
http://baike.baidu.com/view/14806.htm?fr=ala0_1_1
DOM = Document Object Model,文档对象模型,根据W3C DOM规范,DOM是HTML与XML的应用编程

接口(API),DOM将整个页面映射为一个由层次节点组成的文件。有1级、2级、3级共3个级别。

1级DOM在1998年10月份成为W3C的提议,由DOM核心与DOM HTML两个模块组成。DOM核心能映射以

XML为基础的文档结构,允许获取和操作文档的任意部分。DOM HTML通过添加HTML专用的对象与函数对

DOM核心进行了扩展。

鉴于1级DOM仅以映射文档结构为目标,2级DOM面向更为宽广。通过对原有DOM的扩展,2级DOM通过对

象接口增加了对鼠标和用户界面事件(DHTML长期支持鼠标与用户界面事件)、范围、遍历(重复执行

DOM文档)和层叠样式表(CSS)的支持。同时也对DOM 1的核心进行了扩展,从而可支持XML命名空间

3级DOM通过引入统一方式载入和保存文档和文档验证方法对DOM进行进一步扩展,DOM3包含一个名为“

DOM载入与保存”的新模块,DOM核心扩展后可支持XML1.0的所有内容,包扩XML Infoset、 XPath、和

XML Base。

/**************************************************
           XML DOM学习
**************************************************/
http://www.w3school.com.cn/xmldom/index.asp
节点
根据 DOM,XML 文档中的每个成分都是一个节点。
DOM 是这样规定的:
整个文档是一个文档节点
每个 XML 标签是一个元素节点
包含在 XML 元素中的文本是文本节点
每一个 XML 属性是一个属性节点
注释属于注释节点

文本总是存储在文本节点中
在 DOM 处理中一个普遍的错误是,认为元素节点包含文本。
不过,元素节点的文本是存储在文本节点中的。
在这个例子中:<year>2005</year>,元素节点 <year>,拥有一个值为 "2005" 的文本节点。
"2005" 不是 <year> 元素的值!

DOM 解析中的浏览器差异
1、加载 XML 的方式 http://www.w3school.com.cn/xmldom/dom_parser.asp
微软(ActiveXObject)和其它浏览器内建不同的XML解析器。
function loadXMLDoc(dname)
{
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try
  {
  xmlDoc.async=false;
  xmlDoc.load(dname); // 注意load和loadXML方法的区别
  return(xmlDoc);
  }
catch(e) {alert(e.message)}
return(null);
}

2、处理空白和换行的方式 http://www.w3school.com.cn/xmldom/dom_mozilla_vs_ie.asp
Firefox,以及其他一些浏览器,会把空的空白或换行作为文本节点来处理,而 Internet Explorer 不会这样

由于 Attr 对象也是一种节点,因此它继承 Node 对象的属性和方法。不过属性无法拥有父节点,同时属性

也不被认为是元素的子节点,对于许多 Node 对象的属性来说都将返回 null。使用ownerElement 属性返

回 attribute 所附属的元素节点。

DOM Attribute List (Named Node Map)
xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("book")[0].attributes; // 属性列表

document.write(x.getNamedItem("category").nodeValue);
document.write("<br />" + x.length);