XML四
1. DOM简介(解析)
- DOM是Document Object Model的缩写,即文档对象模型
- DOM就是XML文档的一个结构化的视图,它将一个XML文档看作是一棵节点树
- 大部分浏览器都内建了用于读取和操作 XML 的 XML 解析器;解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象
- 通过微软的 XML 解析器加载 XML
– xmlDoc=new ActiveXObject(“Microsoft.XMLDOM”);
– xmlDoc.async=“false”;
– xmlDoc.load(“11-2.xml”); - 在 Firefox 及其他浏览器中的 XML 解析器
– xmlDoc=document.implementation.createDocument("","",null);
– xmlDoc.async=“false”;
– xmlDoc.load(“11-2.xml”);
1.2DOM的典型属性和方法
- 典型的 DOM 属性:
x.nodeName - x 的名称
x.nodeValue - x 的值
x.parentNode - x 的父节点
x.childNodes - x 的子节点
x.attributes - x 的属性节点 - XML DOM的常用方法
x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素
x.appendChild(node) - 向 x 插入子节点
x.removeChild(node) - 从 x 删除子节点 - 例子
str1=xmlDoc.getElementsByTagName(“name”)[0].childNodes[0].nodeValue
执行结果,str1中的值是“香鱼”
xmlDoc - 由解析器创建的 XML DOM
getElementsByTagName(“name”)[0] - 第一个 元素
childNodes[0] - 元素的第一个子节点 (文本节点) • nodeValue - 节点的值 (文本自身)
1.3DOM Node List
- getElementsByTagName() 方法返回节点列表 (node list),节点列表是节点的数组
xmlDoc=loadXMLDoc(“11-2.xml”);
x1=xmlDoc.getElementsByTagName(“fish”); - 当需要询问第4个,则用 x2=x1[3];
xmlDoc=loadXMLDoc(“11-2.xml”);
x=xmlDoc.getElementsByTagName(“name”);
for (i=0;i<x.length;i++){
document.write(x[i].childNodes[0].nodeValue);
document.write("<br />");
} - length 属性定义节点列表的长度(即节点的数目)
1.4节点的属性
- 在 XML 文档对象模型 (DOM) 中,每个节点都是一个对象
- 对象拥有方法(功能)和属性(关于对象的信息),并可通过 JavaScript 进行访问和操作
- 基本的XML DOM节点属性是:
nodeName
nodeValue
nodeType
1.4.1nodeName 属性
- nodeName 属性规定节点的名称
nodeName 是只读的
元素节点的 nodeName 与标签名相同
属性节点的 nodeName 是属性的名称
文本节点的 nodeName 永远是 #text
文档节点的 nodeName 永远是 #document
1.4.2nodeValue 属性
- nodeValue 属性规定节点的值
元素节点的 nodeValue 是 undefined
文本节点的 nodeValue 是文本自身
属性节点的 nodeValue 是属性的值
1.4.3nodeType 属性
- nodeType 属性规定节点的类型
- nodeType 是只读的
属性 | 节点类型 |
---|---|
元素 | 1 |
属性 | 2 |
文本 | 3 |
注释 | 8 |
文档 | 9 |
1.5XML DOM 应用
- 加载文档
- 文档遍历
- 对源XML文档进行修改并保存
- XSLT转换
2. SAX简介(传输)
- 简单 API:Simple API for XML, SAX;由它定义的事件流可以指定从解析器传到专门的处理程序代码的 XML 结构
2.1SAX工作机制
- 首先获得一个实现SAX接口的解析器
- 解析器会把XML文档作为一个流读出来,并将文件流转换成一个事件流
- 根据事件调用定义在解析器里的事件处理方法对流中的事件做出响应
2.2SAX解析器中主要有5种事件
- startDocument
- startElement
- Characters
- endElement
- endDocument
2.3SAX包
- SAX解析器在下表中列出的软件包中定义
包 | 描述 |
---|---|
org.xml.sax | 定义SAX接口 |
org.xml.sax.ext | 定义用于更高级SAX处理的SAX扩展 |
org.xml.sax.helpers | 定义SAX API的辅助类 |
javax.xml.parsers | 定义SAXParserFactory类,它返回SAXParser |
2.4SAX常用接口
- SAXParserFactory:一个根据系统属性生成parser实例的解析器工厂类
- SAXParser:定义了不同种类的parser()方法的接口
SAXParser是一个与SAX事件通讯的处理器,可以使用自定义的handler来处理事件 - SAXReader:当要使用SAXReader的getXMLReader()方法的时候就需要配置它。
- DefaultHandler:通过继承这个类可以实现解析XML文档的所有任务
- ContentHandler:
当遇到XML文档中的标签时,就将会调用这个接口中的startDocument、endDocument、startElement和 endElement 方法
当遇到XML文档中的元素内容时,将调用characters方法 - ErrorHandler:不同类型的错误的错误方法
- DTDHandler:处理DTD信息
- EntityResolver:接口中的resolveEntity方法只在遇到URI标识数据的时候才调用
2.5应用SAX解析器
- 编写基于SAX接口的程序,需要创建一个解析器,利用这个解析器调用XML文档
- 该XML文档需和事件处理器SAX进行绑定
- 在解析器解析文档的时候,如果遇到触发事件的条件如开始标记,就调用相关的事件处理器来处理这个事件
- 使用SAX解析器的步骤如下:
一个解析器工厂的对象:
SAXParserFactory factory=SAXParserFactory. newInstance();
创建一个SAXParser对象(SAX解析器)
SAXParser saxParse=factory. newSAXParser();
调用parse()方法解析XML文件:
public void parse(File f, DefaultHandler dh) throws SAXException, IOException - SAX解析器调用parse()方法解析XML文件的过程中,根据从XML文件解析出的数据产生相应的处理事件,并报告给事件处理器去处理
比如,解析器发现一个标记的开始标记时,将发现的数据封装为一个标记开始事件,并报告给事件处理器,然后调用:
public void startElement(String uri,String localName,String qNam,Attributes atts)
3. HTML5 WEB 存储
- HTML5 web存储,一个比cookie更好的本地存储方式
- WEB存储包括两个对象:
localStorage:没有时间限制的数据存储
sessionStorage:方法针对一个 session 进行数据存储,当用户关闭浏览器窗口后,数据会被删除 - localStorage和sessionStorage可使用的API相同,常用的如下:
– 保存数据:localStorage.setItem(key,value);
– 读取数据:localStorage.getItem(key);
– 删除单个数据:localStorage.removeItem(key);
– 删除所有数据:localStorage.clear();
– 得到某个索引的key:localStorage.key(index);
4. Ajax技术
- AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
- AJAX 不是新的编程语言,而是一种使用现有标准的新方法
- AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的
情况下,AJAX 允许仅将重要信息发送到服务器而不是整个页面。
4.1XMLHttpRequest 对象
- XMLHttpRequest 是 AJAX 的基础,XMLHttpRequest 术语缩写为XHR,中文可以解释为可扩展超文本传输请求
- XMLHttpRequest 对象可以在不向服务器提交整个页面的情况下,实现局部更新网页
- XMLHttpRequest的对象用于客户端和服务器之间的异步通信,并完成如下工作:
在后台从客户端发送数据
从服务器接收数据
更新网页而不重新加载 - 创建 XMLHttpRequest 对象
– IE7+、Firefox、Chrome、Safari 以及 Opera创建语法:
variable=new XMLHttpRequest();
– Internet Explorer (IE5 和 IE6)创建语法:
variable=new ActiveXObject(“Microsoft.XMLHTTP”); - XMLHttpRequest对象的属性
- XMLHttpRequest对象的方法