XML DOM深入浅出之基础
作者:张小飞 iteye账号:z_xiaofei168
时间过的好快,突然发现我太长时间都没有写博客了,以往学的好多东西都快忘了,所以从今天开始,我会慢慢的开始把我个人会的,都以博客的形式写出来和大家分享。再不用技术博客记录下,就都忘了。
前段时间用extjs写树的时候,用的是从后台返回xml字符串,拿到前台解析,前台就用到XML DOM的知识。所以今天就特意整理下这方面的内容。
XML DOM 定义了访问和处理 XML 文档的标准方法。
XML DOM 是 XML Document Object Model 的缩写,即 XML 文档对象模型。
DOM 是 W3C(万维网联盟) 的推荐标准。
一、节点:根据 DOM,XML 文档中的每个成分都是一个节点。
DOM 是这样规定的:
1、整个文档是一个文档节点
2、每个 XML 标签是一个元素节点
3、包含在 XML 元素中的文本是文本节点
4、每一个 XML 属性是一个属性节点
5、注释属于注释节点
文本总是存储在文本节点中,在 DOM 处理中一个普遍的错误是,认为元素节点包含文本。不过,元素节点的文本是存储在文本节点中的。例如:<year>2013</year>,元素节点 <year>,拥有一个值为 "2013" 的文本节点。"2013" 不是 <year> 元素的值!
二、父、子和同级节点:节点树中的节点彼此之间都有等级关系。
父、子和同级节点用于描述这种关系。父节点拥有子节点,位于相同层级上的子节点称为同级节点(兄弟或姐妹)。
1、在节点树中,顶端的节点成为根节点
2、根节点之外的每个节点都有一个父节点
3、节点可以有任何数量的子节点
4、叶子是没有子节点的节点
5、同级节点是拥有相同父节点的节点
三、XML DOM的属性和方法
一些典型的 XML 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 删除子节点
注释:在上面的列表中,x 是一个节点对象。
四、XML DOM的解析
1、加载并解析XML文件
/** * 加载XML文档 */ function loadXMLDoc(docName) { try // Internet Explorer { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); // 创建空的微软 XML 文档对象 } catch (e) { try // Firefox, Mozilla, Opera, etc. { xmlDoc = document.implementation.createDocument("", "", null); // 创建空的XML文档对象 } catch (e) { alert(e.message) } } try { xmlDoc.async = false; // 关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本 xmlDoc.load(docName); // 告知解析器加载名为 "books.xml" 的文档 return xmlDoc; } catch (e) { alert(e.message) } return (null); }
公用的XML文件如下:
<?xml version="1.0" encoding="UTF-8"?> <books> <book category="WEB前端"> <title low="extjs">EXTJS</title> <author>z_xiaofei168</author> <year>2013</year> </book> <book category="WEB前端"> <title low="jquery">JQUERY</title> <author>z_xiaofei168</author> <year>2013</year> </book> <book category="WEB前端"> <title low="jsf">JSF</title> <author>z_xiaofei168</author> <year>2013</year> </book> </books>
解析XML文件,这里是用jsp写的案例。
document.write("加载book.xml文件 <br />"); xmlDoc = loadXMLDoc("<%=path %>/xml/book.xml"); document.write(xmlDoc.getElementsByTagName("title")[0].nodeName+": "); document.write(xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue); document.write("<br />"); document.write(xmlDoc.getElementsByTagName("author")[0].nodeName+": "); document.write(xmlDoc.getElementsByTagName("author")[0].childNodes[0].nodeValue); document.write("<br />"); document.write(xmlDoc.getElementsByTagName("year")[0].nodeName+": "); document.write(xmlDoc.getElementsByTagName("year")[0].childNodes[0].nodeValue); document.write("<br />");
输出以下内容:
加载book.xml文件
title: EXTJS
author: z_xiaofei168
year: 2013
2、加载并解析XML字符串
/** * 加载XML字符串 */ function loadXMLString(text) { try // Internet Explorer { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); // 创建空的微软 XML 文档对象 xmlDoc.async = false; // 关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本 xmlDoc.loadXML(text); // 告知解析器加载名为 text 的字符串 } catch (e) { try // Firefox, Mozilla, Opera, etc. { parser = new DOMParser(); // 创建一个空的 XML 文档对象 xmlDoc = parser.parseFromString(text, "text/xml"); // 告知解析器加载名为text的字符串 } catch (e) { alert(e.message) } } return xmlDoc; }
五、XML DOM节点信息
节点的属性
在 XML 文档对象模型 (DOM) 中,每个节点都是一个对象。
对象拥有方法(功能)和属性(关于对象的信息),并可通过 JavaScript 进行访问和操作。
三个重要的 XML DOM 节点属性是:
nodeName
nodeValue
nodeType
// 获取元素的值 document.write(xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue);
输出:EXTJS
// 更改元素的值 xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue="Hello World";
输出:Hello World
nodeType 属性
元素类型 | 节点类型 |
元素ELEMENT | 1 |
属性ATTRIBUTE | 2 |
文本TEXT | 3 |
CDATA_SECTION | 4 |
实体引用ENTITY_REFERENCE | 5 |
实体ENTITY | 6 |
处理指令PROCESSING_INSTRUCTION | 7 |
注释COMMENT | 8 |
文档DOCUMENT | 9 |
文档类型DOCUMENT_TYPE | 10 |
文档片段DOCUMENT_FRAGMENT | 11 |
表示法NOTATION | 12 |
六、XML DOM NODE LIST
当使用诸如 childNodes 或 getElementsByTagName() 属性或方法时,会返回 NodeList 对象。odeList 对象表示节点的列表,以 XML 中的相同顺序。使用从 0 开始的下标来访问节点列表中的节点。
具体代码附件中都有
七、XML DOM ATTRIBUTE LIST
元素节点的 attributes 属性返回属性节点的列表。这被称为 Named Node Map,除了方法和属性上的一些差别以为,它与节点列表相似。属性列表会保持自身的更新。如果删除或添加属性,这个列表会自动更新。
八、XML DOM 浏览器差异
不同的浏览器在 XML DOM 中处理空文本节点的方式是不同的。
所有现代浏览器都支持 W3C DOM 规范。
不过,浏览器之间是有差异的。重要的区别有两点:
1、加载 XML 的方式
2、处理空白和换行的方式
XML 经常在节点之间含有换行或空白字符。这是在使用简单的编辑器(比如记事本)时经常出现的情况。
忽略节点间的空文本
如需忽略元素节点之间的空文本节点,需要检查节点类型。元素节点的类型是 1:
// 节点长度[不同浏览器是不同的] document.write("节点长度[不同浏览器是不同的]: "+x.length); for (i=0,n=x.length;i<n;i++) { if (x[i].nodeType==1) {//Process only element nodes (type 1) document.write(x[i].nodeName); document.write("<br />"); } }
相关推荐
本篇文章将深入浅出地探讨XML的核心概念、语法、解析方式以及在实际中的应用。 一、XML基本概念 XML源于HTML,但两者的主要区别在于HTML主要用于展示数据,而XML专注于描述数据。XML文档由元素(Element)、属性...
**深入浅出AJAX源码**,这是一份与AJAX技术密切相关的源代码资源,源自书籍《深入浅出AJAX》的配套光盘。AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。...
《深入浅出JavaScript》这本书致力于帮助读者掌握JavaScript的核心概念,通过配合提供的源码,学习过程将更具实践性和洞察力。 首先,我们要了解JavaScript的基础。JavaScript是一种解释型的、弱类型的、基于原型的...
总之,"深入浅出JavaScript" 和其配套的实例将引导读者从基础到高级,全面掌握JavaScript编程,无论你是Web开发的新手还是寻求提升的开发者,这套资源都能提供宝贵的指导。通过实践和不断的探索,你将能够利用...
在"深入浅出Ajax"这本书中,作者深入讲解了Ajax的基本原理和实际应用。 **章节概览** 根据描述,这本书分为七章,每章可能涵盖以下关键知识点: 1. **第一章:初识Ajax** - Ajax的历史和概念 - Ajax工作原理的...
### 深入浅出Greasemonkey优化 #### 1. 开始 ##### 1.1 Greasemonkey是什么? Greasemonkey是一个专为Mozilla Firefox设计的浏览器扩展插件,它允许用户通过自定义JavaScript脚本来改变网页的行为与功能。通过...
《深入浅出学习Ajax》这本书是一本非常适合初学者及有一定基础的开发者学习Ajax的指南。本书由Brett McLaughlin撰写,并由菜花制作,详细介绍了Ajax的核心概念和技术细节,通过一系列文章逐步引导读者掌握Ajax的基础...
本书《深入浅出JavaScript 4th.Edition(英文原版)》是一本非常全面且实用的JavaScript入门书籍,不仅覆盖了JavaScript的基础知识,还涉及了许多高级主题,如DOM操作、Ajax、框架使用等。无论是对于刚接触JavaScript...
### Head First AJAX 深入浅出:关键知识点解析 #### 一、引言 《Head First AJAX 深入浅出》是一本专注于讲解AJAX技术及其在现代Web开发中应用的专业书籍。该书由Rebecca M. Riordan编写,并得到了多位业界专家的...
耿祥义教授编写的《XML基础教程》第二版,旨在深入浅出地介绍XML的基本概念、语法规范及其应用技术。下面将根据提供的压缩包文件名,详细阐述各个章节的知识点。 第一章:XML简介 这一章会介绍XML的起源,作为HTML...
深入浅出《实战XML第二版》这本书,无疑是帮助读者掌握XML技术的优秀资源。它不仅覆盖了XML的基础知识,还深入探讨了XML在实际应用中的各种策略和技术。 XML的设计目标是传输和存储数据,而不是用于显示数据。这...
深入浅出,既是大学计算机及其应用、电子商务、网络营销等专业网页设计的教材,又是信息产业和IT技术中蓝领和白领的必备读物。 第一章 XML基础 第二章 XML语法 第三章 DTD 第四章 Schema 第五章 名域. 第六章 CSS ...
本教程将深入浅出地讲解XML的基础知识,并提供实验指导,帮助新手快速掌握XML的核心概念。 XML的起源与特点: XML起源于1998年,由W3C(万维网联盟)发布,旨在替代HTML在数据传输中的局限性。XML的主要特点是: 1...
本教程《深入浅出Ajax.pdf》将详细阐述以上知识点,并提供丰富的示例和实践指导,帮助读者从基础到进阶,全面掌握Ajax技术。通过学习,开发者不仅可以提升Web应用的用户体验,还能更好地应对现代Web开发的挑战。
《深入浅出Ajax源码》...总的来说,《深入浅出Ajax源码》是一本适合初学者和有一定基础的开发者阅读的书籍,它不仅讲解了Ajax的基础知识,还通过实例深入探讨了其背后的原理和实践技巧,对于提升Web开发技能大有裨益。
XML(eXtensible Markup Language)是一种用于标记...而提供的“八套Xml文档对象模型Dom书籍文档资料”应该包含了深入浅出的DOM理论讲解、实践案例分析以及相关的API使用指南,对于深入学习DOM和XML处理非常有价值。
在本教程“XML基础及实践开发教程”中,唐琳主编结合丰富的教学经验,为学习者提供了深入浅出的XML理论知识与实践操作指导。以下是该教程可能涵盖的关键知识点: 1. **XML基本概念**:XML起源于HTML,但更注重结构...
《Head First深入浅出Ajax》是一本专门为初学者和进阶者设计的关于Ajax技术的中文版指南。这本书以其独特的视觉风格和易于理解的方式,详细介绍了Ajax的核心概念和技术,是JavaScript开发者深入理解Web异步通信的...