所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器。解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象)。

一、获取DOM对象

XMLHttpRequest执行ajax响应的XML文档转为DOM对象

var xmlhttp=null;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome
xmlhttp=new XMLHttpRequest();
}else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
var xmlDoc=xmlhttp.responseXML; //将xml文档转换为XML DOM对象

解析外部 XML 文档为DOM对象

var xmlDoc=null;
if (window.XMLHttpRequest){//其他浏览器
xmlDoc=document.implementation.createDocument("","",null);//创建一个空的 XML 文档对象
}else{//IE5及以上版本
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");//创建一个空的 XML 文档对象
}
xmlDoc.async="false";//关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行
xmlDoc.load("note.xml");//加载文件,告知解析器加载名为 "note.xml" 的 XML 文档

解析 XML 字符串为DOM对象

var txt="<bookstore><book><title>java</title><author>GD</author><year>2016</year></book></bookstore>";
var xmlDoc=null;
if (window.DOMParser){//其他浏览器
var parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}else{//IE浏览器
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);//加载字符串
}

二、解析DOM对象

//xmlDoc -由解析器创建的 XML 文档
//getElementsByTagName("to")[0] - 第一个 <to> 元素
//childNodes[0] - <to> 元素的第一个子元素(文本节点)
//nodeValue - 节点的值(文本本身) //获取第一个to元素的第一个子元素的值
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue; //检索第一个 <title> 元素的 "lang" 属性的文本值
xmlDoc.getElementsByTagName("title")[0].getAttribute("lang"); //改变第一个 <title> 元素的 "lang" 属性的文本值为first
xmlDoc.getElementsByTagName("title")[0].setAttribute("lang","first"); //改变第一个 <title> 元素的文本值
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue="wb"; newel=xmlDoc.createElement("edition");//创建 <edition> 元素
newtext=xmlDoc.createTextNode("First");//创建值为 "First" 的文本节点
newel.appendChild(newtext);//把这个文本节点追加到 <edition> 元素
x=xmlDoc.getElementsByTagName("book");
x[0].appendChild(newel);//把 <edition> 元素追加到第一个 <book> 元素 //删除指定的节点(或元素),删除第一个 <book> 元素中的第一个节点
xmlDoc.getElementsByTagName("book")[0].removeChild(
xmlDoc.getElementsByTagName("book")[0].childNodes[0]
);

三、注意

1、出于安全方面的原因,现代的浏览器不允许跨域的访问。这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。否则,xmlDoc.load() 将产生错误 "Access is denied"。

2、所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束

CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。

标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。

JavaScript使用浏览器内置XML解析器解析DOM对象的更多相关文章

  1. JavaScript使用浏览器内置XMLHttpRequest对象执行Ajax请求

    所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject).XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个 ...

  2. 浏览器内置Console函数使用详解

    浏览器内置Console函数比较好用:Chrome 和 FireFox(Firebug插件) 利用此功能可以像直接在面板里面运行JS一样(写法不同而已) 一.显示信息的命令 Firebug内置一个co ...

  3. javascript中的内置对象

    2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...

  4. 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器

    第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...

  5. 二十 Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器

    编写spiders爬虫文件循环抓取内容 Request()方法,将指定的url地址添加到下载器下载页面,两个必须参数, 参数: url='url' callback=页面处理函数 使用时需要yield ...

  6. JavaScript中的内置函数

    JavaScript中的内置函数 制作人:全心全意 在使用JavaScript语言时,除了可以自定义函数之外,还可以使用JavaScript的内置函数,这些内置函数是由JavaScript语言自身提供 ...

  7. 34、JavaScript面向对象(内置构造函数&相关方法|属性|运算符&继承&面向对象)

    一.面向对象 1.1 this的指向问题 要看清楚最终的函数调用者是谁. IIFE也被当做函数直接运行,IIFE的this都是window对象 函数的arguments是类数组对象,比如传入的第0项参 ...

  8. 浏览器内置的base64方法

    Base64是一种基于64个可打印字符来表示二进制数据的表示方法.在Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同(维基百科: ...

  9. 使用java自带的xml解析器解析xml

    使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...

随机推荐

  1. JAVA算术运算符

    算术运算符 +.-.*(乘号)./(除号,取商).%(取余数.取模) 特殊的运算符:++(加加).--(减减) int  a = 1; a+=10;  等同于a=a+10; a-=5;   等同于a= ...

  2. 项目(二)DNS解析——配置域名服务器

    NDS服务器常见种类有:缓存域名服务器.主域名服务器.从域名服务器.DNS服务器查询方法有两种:递归查询和迭代查询.其中,递归查询是DNS服务器在本地通过缓存.本地映射.记录本得到结果,而迭代查询是D ...

  3. 初学c# -- 学习笔记(9) 关于SQL2008

    在做一个局域网的类似网盘的学习练习,服务端差不多了,在改bug.用vlc的dll做的全格式视频.音频预览在线播放下载等等. 在做服务端也遇到了一些问题,走了好多弯路. 开始把上传的视频.音频.图像.文 ...

  4. load 过高分析办法

    1.top -H 找到占用cpu较高的进程2.top -Hp pid 找到该进程下占用cpu较高的线程id3.sudo -u adminjstack -F 进程id > ~/stack.txt ...

  5. linux之重定向命令

    1.shell重定向概念:shell重定向包含输出重定向和输入重定向 何为输入输出方向?何为标准输入输出方向? 标准输入方向:从键盘读取用户输入的数据,然后再把数据拿到程序(C语言程序.Shell 脚 ...

  6. 现代编译原理--第六章(中间树 IR Tree 含源码)

    (转载请表明出处   http://www.cnblogs.com/BlackWalnut/p/4559717.html ) 这一章,就虎书而言,理论知识点是及其少的,就介绍了为什么要有一个中间表示树 ...

  7. NGS NGS ngs(hisat,stringtie,ballgown)

    NGS ngs(hisat,stringtie,ballgown) #HISAT (hierarchical indexing for spliced alignment of transcripts ...

  8. python基础之Day9

    一.文件操作 1.r+t:可读可写 2.w+t:可写可读 3.a+t:可追加写.可读 4.f.seek(offset,whence) offset代表文件的指针的偏移量,单位是字节byteswhenc ...

  9. C++学习札记(3)

    一边听着许巍的音乐,一遍学习着C++的精髓,这感觉这酸爽,我一个人体会和知道. 许巍是两代人共同的时代标志,他的音乐作品脍炙人口,堪称经典,经久不衰:此时此刻品味,依然有丰富的各种味道和感情.可能因为 ...

  10. 设计模式 策略模式2 c++11

    根据需求的不同 选择不同的策略算法 之前是保存的各种策略类的指针 这里直接使用 function  bind 选择对应的算法 代码 // 005.cpp: 定义控制台应用程序的入口点. // #inc ...