`
z_xiaofei168
  • 浏览: 200961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XML DOM深入浅出之基础

 
阅读更多

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 />");
   } 
} 

 

 

5
1
分享到:
评论
4 楼 z_xiaofei168 2013-07-31  
jahu 写道
z_xiaofei168 写道
m_wen997721750 写道
不错不错,楼主很厉害,很有用

很长时间都不写了,这都是简单实用的,这是基础,基础掌握的好,才能更好的掌握复杂的

不错,,如果简单的都掌握不好,更别说复杂的了,

嗯,是的
3 楼 jahu 2013-07-30  
z_xiaofei168 写道
m_wen997721750 写道
不错不错,楼主很厉害,很有用

很长时间都不写了,这都是简单实用的,这是基础,基础掌握的好,才能更好的掌握复杂的

不错,,如果简单的都掌握不好,更别说复杂的了,
2 楼 z_xiaofei168 2013-07-30  
m_wen997721750 写道
不错不错,楼主很厉害,很有用

很长时间都不写了,这都是简单实用的,这是基础,基础掌握的好,才能更好的掌握复杂的
1 楼 m_wen997721750 2013-07-30  
不错不错,楼主很厉害,很有用

相关推荐

    XML深入浅出

    本篇文章将深入浅出地探讨XML的核心概念、语法、解析方式以及在实际中的应用。 一、XML基本概念 XML源于HTML,但两者的主要区别在于HTML主要用于展示数据,而XML专注于描述数据。XML文档由元素(Element)、属性...

    深入浅出AJAX源码

    **深入浅出AJAX源码**,这是一份与AJAX技术密切相关的源代码资源,源自书籍《深入浅出AJAX》的配套光盘。AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。...

    深入浅出javascript源码

    《深入浅出JavaScript》这本书致力于帮助读者掌握JavaScript的核心概念,通过配合提供的源码,学习过程将更具实践性和洞察力。 首先,我们要了解JavaScript的基础。JavaScript是一种解释型的、弱类型的、基于原型的...

    深入浅出javascript pdf与实例

    总之,"深入浅出JavaScript" 和其配套的实例将引导读者从基础到高级,全面掌握JavaScript编程,无论你是Web开发的新手还是寻求提升的开发者,这套资源都能提供宝贵的指导。通过实践和不断的探索,你将能够利用...

    深入浅出Ajax(Head Rush Ajax) 源码 书中代码

    在"深入浅出Ajax"这本书中,作者深入讲解了Ajax的基本原理和实际应用。 **章节概览** 根据描述,这本书分为七章,每章可能涵盖以下关键知识点: 1. **第一章:初识Ajax** - Ajax的历史和概念 - Ajax工作原理的...

    深入浅出 Greasemonkey优化

    ### 深入浅出Greasemonkey优化 #### 1. 开始 ##### 1.1 Greasemonkey是什么? Greasemonkey是一个专为Mozilla Firefox设计的浏览器扩展插件,它允许用户通过自定义JavaScript脚本来改变网页的行为与功能。通过...

    深入浅出学习ajax

    《深入浅出学习Ajax》这本书是一本非常适合初学者及有一定基础的开发者学习Ajax的指南。本书由Brett McLaughlin撰写,并由菜花制作,详细介绍了Ajax的核心概念和技术细节,通过一系列文章逐步引导读者掌握Ajax的基础...

    深入浅出JavaScript 4th.Edition(英文原版)

    本书《深入浅出JavaScript 4th.Edition(英文原版)》是一本非常全面且实用的JavaScript入门书籍,不仅覆盖了JavaScript的基础知识,还涉及了许多高级主题,如DOM操作、Ajax、框架使用等。无论是对于刚接触JavaScript...

    Head First AJAX 深入浅出

    ### Head First AJAX 深入浅出:关键知识点解析 #### 一、引言 《Head First AJAX 深入浅出》是一本专注于讲解AJAX技术及其在现代Web开发中应用的专业书籍。该书由Rebecca M. Riordan编写,并得到了多位业界专家的...

    XML基础教程第2版教学课件

    耿祥义教授编写的《XML基础教程》第二版,旨在深入浅出地介绍XML的基本概念、语法规范及其应用技术。下面将根据提供的压缩包文件名,详细阐述各个章节的知识点。 第一章:XML简介 这一章会介绍XML的起源,作为HTML...

    深入浅实战XML第二版.rar

    深入浅出《实战XML第二版》这本书,无疑是帮助读者掌握XML技术的优秀资源。它不仅覆盖了XML的基础知识,还深入探讨了XML在实际应用中的各种策略和技术。 XML的设计目标是传输和存储数据,而不是用于显示数据。这...

    XML原理及应用(XML设计)

    深入浅出,既是大学计算机及其应用、电子商务、网络营销等专业网页设计的教材,又是信息产业和IT技术中蓝领和白领的必备读物。 第一章 XML基础 第二章 XML语法 第三章 DTD 第四章 Schema 第五章 名域. 第六章 CSS ...

    XML基础教程与实验指导.rar

    本教程将深入浅出地讲解XML的基础知识,并提供实验指导,帮助新手快速掌握XML的核心概念。 XML的起源与特点: XML起源于1998年,由W3C(万维网联盟)发布,旨在替代HTML在数据传输中的局限性。XML的主要特点是: 1...

    深入浅出Ajax教程

    本教程《深入浅出Ajax.pdf》将详细阐述以上知识点,并提供丰富的示例和实践指导,帮助读者从基础到进阶,全面掌握Ajax技术。通过学习,开发者不仅可以提升Web应用的用户体验,还能更好地应对现代Web开发的挑战。

    深入浅出Ajax源码

    《深入浅出Ajax源码》...总的来说,《深入浅出Ajax源码》是一本适合初学者和有一定基础的开发者阅读的书籍,它不仅讲解了Ajax的基础知识,还通过实例深入探讨了其背后的原理和实践技巧,对于提升Web开发技能大有裨益。

    八套Xml文档对象模型Dom书籍文档资料.rar

    XML(eXtensible Markup Language)是一种用于标记...而提供的“八套Xml文档对象模型Dom书籍文档资料”应该包含了深入浅出的DOM理论讲解、实践案例分析以及相关的API使用指南,对于深入学习DOM和XML处理非常有价值。

    XML基础及实践开发教程(唐琳-主编)习题答案

    在本教程“XML基础及实践开发教程”中,唐琳主编结合丰富的教学经验,为学习者提供了深入浅出的XML理论知识与实践操作指导。以下是该教程可能涵盖的关键知识点: 1. **XML基本概念**:XML起源于HTML,但更注重结构...

    Head First深入浅出Ajax 中文版PDF

    《Head First深入浅出Ajax》是一本专门为初学者和进阶者设计的关于Ajax技术的中文版指南。这本书以其独特的视觉风格和易于理解的方式,详细介绍了Ajax的核心概念和技术,是JavaScript开发者深入理解Web异步通信的...

Global site tag (gtag.js) - Google Analytics