XML DOM完全参考手册(二)DOM节点
2016-07-26 17:56
453 查看
解析 XML DOM
大多数浏览器都内建了供读取和操作 XML 的 XML 解析器。解析器把 XML 转换为 JavaScript 可存取的对象。
解析 XML
所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。
微软的 XML 解析器与其他浏览器中的解析器是有差异的。微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都含有遍历 XML 树、访问、插入及删除节点的函数。
通过微软的 XML 解析器加载 XML
微软的 XML 解析器内建于 Internet Explorer 5 及更高版本中。下面的 JavaScript 片段把 XML 文档 ("books.xml") 载入了解析器:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.load("books.xml");
代码解释:
第一行创建空的微软 XML 文档对象第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
第三行告知解析器加载名为 "books.xml" 的文档
下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(txt);注释:loadXML() 方法用于加载字符串(文本),而 load() 用于加载文件。
在 Firefox 及其他浏览器中的 XML 解析器
下面的 JavaScript 片段把 XML 文档 ("books.xml")载入了解析器:
<span style="background-color: rgb(249, 249, 249);">x</span><span style="background-color: rgb(255, 255, 255);">mlDoc=document.implementation.createDocument("","",null); xmlDoc.async="false"; xmlDoc.load("books.xml");</span>
代码解释:
第一行创建空的 XML 文档对象第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
第三行告知解析器加载名为 "books.xml" 的文档
下面的 JavaScript 片段把名为 txt 的字符串载入解析器中:
<span style="background-color: rgb(255, 255, 255);">parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,"text/xml");</span>
代码解释:
第一行创建一个空的 XML 文档对象第二行告知解析器加载名为 txt 的字符串
注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
<span style="background-color: rgb(255, 255, 255);"><html> <body> <script type="text/javascript"> try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } catch(e) { try //Firefox, Mozilla, Opera, etc. { xmlDoc=document.implementation.createDocument("","",null); } catch(e) {alert(e.message)} } try { xmlDoc.async=false; xmlDoc.load("books.xml"); document.write("xmlDoc is loaded, ready for use"); } catch(e) {alert(e.message)} </script> </body> </html></span>
解析 XML 字符串 - 一个跨浏览器的实例
下面的代码加载并解析了一个 XML 字符串:<span style="background-color: rgb(255, 255, 255);"><html> <body> <script type="text/javascript"> text="<bookstore>" text=text+"<book>"; text=text+"<title>Harry Potter</title>"; text=text+"<author>J K. Rowling</author>"; text=text+"<year>2005</year>"; text=text+"</book>"; text=text+"</bookstore>"; try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(text); } catch(e) { try //Firefox, Mozilla, Opera, etc. { parser=new DOMParser(); xmlDoc=parser.parseFromString(text,"text/xml"); } catch(e) {alert(e.message)} } document.write("xmlDoc is loaded, ready for use"); </script> </body> </html></span>
XML DOM 访问节点
function loadXMLDoc(dname) { try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); } catch(e) { try //Firefox, Mozilla, Opera, etc. { xmlDoc=document.implementation.createDocument("","",null); } catch(e) {alert(e.message)} } try { xmlDoc.async=false; xmlDoc.load(dname); return(xmlDoc); } catch(e) {alert(e.message)} return(null); }一个通用的加载XML的方法;
访问节点
您可以通过三种方法来访问节点:通过使用 getElementsByTagName() 方法
通过循环(遍历)节点树
通过利用节点的关系在节点树中导航
循环遍历访问title节点
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title"); for (i=0;i<x.length;i++) { document.write(x[i].childNodes[0].nodeValue); document.write("<br />"); }
例子解释:
使用 loadXMLDoc() 把"books.xml" 载入 xmlDoc
取得所有 <title> 元素节点
输出每个 <title> 元素的文本节点的值
Node Type
XML 文档的 documentElement 属性是根节点。节点的 nodeName 属性是节点的名称。
节点的 nodeType 属性是节点的类型。
遍历节点
下面的代码循环根节点的子节点,同时也是元素节点:xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; for (i=0;i<x.length;i++) { if (x[i].nodeType==1) {//Process only element nodes (type 1) document.write(x[i].nodeName); document.write("<br />"); } }
例子解释:
通过使用 loadXMLDoc() 把"books.xml" 载入 xmlDoc 中
获得根元素的子节点
检查每个子节点的节点类型。如果节点类型是 "1",则是元素节点
如果是元素节点,则输出节点的名称
XML DOM 节点信息
节点的属性
在 XML 文档对象模型 (DOM) 中,每个节点都是一个对象。对象拥有方法(功能)和属性(关于对象的信息),并可通过 JavaScript 进行访问和操作。
三个重要的 XML DOM 节点属性是:
nodeName
nodeValue
nodeType
nodeName 属性
nodeName 属性规定节点的名称。nodeName 是只读的
元素节点的 nodeName 与标签名相同
属性节点的 nodeName 是属性的名称
文本节点的 nodeName 永远是 #text
文档节点的 nodeName 永远是 #document
nodeValue 属性
nodeValue 属性规定节点的值。元素节点的 nodeValue 是 undefined
文本节点的 nodeValue 是文本自身
属性节点的 nodeValue 是属性的值
更改元素的值
下面的代码更改第一个 <title> 元素的文本节点的值:xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title")[0].childNodes[0]; x.nodeValue="Easy Cooking";
代码解释:
通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中获取第一个 <title> 元素节点的文本节点
把文本节点的值更改为 "Easy Cooking"
nodeType 属性
nodeType 属性规定节点的类型。nodeType 是只读的。
最重要的节点类型是:
元素类型 | 节点类型 |
---|---|
元素 | 1 |
属性 | 2 |
文本 | 3 |
注释 | 8 |
文档 | 9 |
相关文章推荐
- 算法:排序
- 杭电-1551 剪电缆(二分)
- java删除文件夹
- filenamefilter的应用
- Java transient关键字使用小记
- PAT 1021 Set Similarity (25)
- 【CodeForces】670D2 - Magic Powder - 2(二分)
- datatables 进阶
- POJ1988->并查集
- eclipse中本地一个项目引用另一个项目的方法
- hdu 5753 Permutation Bo
- html css零散知识总结
- 今天继续讲c/c++的小知识啊
- ViewModel命令ICommand对象定义
- springmvc jquery json ajax
- Ubuntu 14.04 的 SSH 无密码登录
- 【坐在马桶上看算法】算法6:只有五行的Floyd最短路算法
- 序列化Serializable
- MacBook Pro安装系统指定版本的系统
- OpenGL基础教程(2):着色器