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

解析 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对象

方法二:

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]
);

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

所有 XML 文档中的文本均会被解析器解析。
只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。

XML 解析器的更多相关文章

  1. Duilib源码分析(三)XML解析器—CMarkup

    上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...

  2. tinyxml一个优秀的C++ XML解析器

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

  3. TinyXML:一个优秀的C++ XML解析器

    //-------------------------------------------------------------------------------------------------- ...

  4. 转:TinyXM--优秀的C++ XML解析器

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

  5. XML解析器(转)

    常见C/C++ XML解析器有tinyxml.XERCES.squashxml.xmlite.pugxml.libxml等等,这些解析器有些是支持多语言的,有些只是单纯C/C++的.如果你是第一次接触 ...

  6. TinyXML:一个优秀的C++ XML解析器[转]

    TinyXML:一个优秀的C++ XML解析器 读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似 ...

  7. Java XML解析器

    使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...

  8. Xml的转义字符--约束-xml解析器

    XML解析器:Dom适合增删改查(crud),缺点就是内存消耗大:  Sax:内存消耗非常小,解析速度快,但是不适合增删改:

  9. CDATA(不应由XML解析器进行解析的文本数据)、CDATA的使用场景

    1.1. CDATA: CDATA(Unparsed Character Data)指的是不应由XML解析器进行解析的文本数据. 因为XML解析器会将“<”(新元素的开始)和“&”(字符 ...

随机推荐

  1. nodepad + 插件

    Notepad++是一款Windows环 境下免费开源的代码编辑器,支持的语言: C, C++ , Java , C#, XML,SQL,Ada, HTML, PHP, ASP, AutoIt, 汇编 ...

  2. java中方法的参数传递机制(值传递还是引用传递)

    看到一个java面试题: 问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  答:是值传递.Java 编程语言只有值传递参 ...

  3. ACM题目————网格动物

    Lattice animal is a set of connected sites on a lattice. Lattice animals on a square lattice are esp ...

  4. /proc/sysrq-trigger的功能 介绍

    介绍/proc/sysrq-trigger的强大功能 让大家了解一下,在linux里,可以利用/proc/sysrq-trigger做些事情 # 立即重新启动计算机echo "b" ...

  5. webrtc - web 应用相关网站

    很有意思的网站 http://io13webrtc.appspot.com/#1 html5使用webrtc简介 http://www.html5rocks.com/en/tutorials/getu ...

  6. SQL Server 索引和表体系结构(三)

    转自:http://www.cnblogs.com/chenmh/p/3785285.html 包含列索引 概述 包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索引 ...

  7. JSP 资源与网站

    JS文件说明 1.1 jquery 描述:一个兼容多浏览器的javascript框架,可以操作文档对象.选择DOM元素.制作动画效果.事件处理.使用Ajax以及其他功能. 文件路径:Commonjs/ ...

  8. python终端颜色设置

    1.颜色定义说明 格式:\033[显示方式;前景色;背景色m   前景色 背景色 颜色 --------------------------------------- 30 40  黑色 31 41 ...

  9. oracle分组统计某列逗号隔开数据

    所有版本的oracle都可以使用select wm_concat(name) as name from user; 但如果是oracle11g,使用select listagg(name, ',') ...

  10. 2012 #5 History repeat itself

    History repeat itself Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...