最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Javascript中XML文档的查询与加载
时间:2022-06-25 16:48:02 编辑:袖梨 来源:一聚教程网
Document 定义的方法大多数是生产型方法,主要用于创建可以插入文档中的各种类型的节点。常用的 Document 方法有:
方法 |
描述 |
createAttribute() |
用指定的名字创建新的 Attr 节点。 |
createComment() |
用指定的字符串创建新的 Comment 节点。 |
createElement() |
用指定的标记名创建新的 Element 节点。 |
createTextNode() |
用指定的文本创建新的 TextNode 节点。 |
getElementById() |
返回文档中具有指定 id 属性的 Element 节点。 |
getElementsByTagName() |
返回文档中具有指定标记名的所有 Element 节点。 |
加载
通过XML DOM对象就可以载入一些XML了。微软的XML DOM有两种载入XML的方法:loadXML()与load()。
loadXML()方法可直接向XML DOM输入XML字符串:
代码如下 | 复制代码 |
oXmlDom.loadXML(' |
load()方法用于从服务器上载入XML文件。不过,load()方法只可以载入包含JavaScript的页面存储于同一服务器上的文件 ,也就是说,不可以通过其他人的服务器载入XML文件。
还有两种载入文件的模式:同步与异步。以同步模式载入文件时,JavaScript代码会等待文件完全载入后才继续执行代码;而以异步模式载入时,不会等待,可以使用事件处理函数来判断文件是否完全载入了 。
默认情况下,文件是按照异步模式载入的,要进行同步载入,只需设置async属性为false :
Js代码
1.
代码如下 | 复制代码 |
oXmlDom.async = false; oXmlDom.async = false; |
然后使用load()方法,并给出要载入的文件名:
Js代码
1.
代码如下 | 复制代码 |
oXmlDom.load('test.xml'); oXmlDom.load('test.xml'); |
执行这一行代码后,oXmlDom会包含能表示XML文件结构的一个DOM文档,这样就可以使用DOM所有的属性与方法了。
异步载入文件时,要使用readyState属性和onreadystatechange事件处理函数:
readyState属性有一种上可能的值:
•0——DOM尚未初始化任何信息
•1——DOM正在载入数据
•2——DOM完成了数据载入
•3——DOM已经可用,不过某些部分可能还不能用
•4——DOM已经完全载入,可以使用了
一旦readyState属性的值发生变化,就会触发readystatechange事件,如果使用onreadystatechange事件处理函数,就可以在DOM完全载入时,发出通知,必须在调用load()方法前分配好onreadystatechange事件处理函数,如:
Js代码
代码如下 | 复制代码 |
oXmlDom.onreadystatechange = function () { if (oXmlDom.readyState == 4) { alert('done'); } }; oXmlDom.load("test.xml"); oXmlDom.onreadystatechange = function () { if (oXmlDom.readyState == 4) { alert('done'); } }; oXmlDom.load("test.xml"); |
注:事件处理函数代码中要使用oXmlDom而不是this关键字。这是ActiveX对象特殊之处:使用this关键词可能会出现不可预测的错误。
无论是同步还是异步地载入文件,load()方法都可能接受部分的,相对的或者完整的XML文件路径,如下:
代码如下 | 复制代码 |
oXmlDom.load('test.xml'); oXmlDom.load('../test.xml'); oXmlDom.load('http://www.mydomanin.com/test.xml'); |
查询
对XML的元素、属性、文本的查询可以使用XPath。具体的定义可以参看w3school。
首先应该了解一下XPath表达式:
表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
我们主要使用两个方法来查询XML文档,selectNodes(xpath expression)和selectSingleNode(xpath expression)。
selectNodes返回一个NodeList对象,也就是所有符合xpath表达式的xml节点都将会被返回,你需要对返回的结果进行遍历。
selectSingleNode只返回第一个符合xpath表达式的节点,或者返回null。
下面举几个例子:
1. 返回所有Contact节点:
代码如下 | 复制代码 |
var nodelist = xmlDoc.selectNodes("/Customers/Customer/Contact"); 返回的结果为:
|
2. 返回id为02的customer:
代码如下 | 复制代码 |
xmlDoc.selectSingleNode("/Customers/Customer[@id='02']") |
返回结果为:
<
代码如下 | 复制代码 |
Customer id="02" city="Amsterdam" country="The Netherlands" name="Shell"> |
3. 返回含有contact名为Li Li的contact:
代码如下 | 复制代码 |
xmlDoc.selectSingleNode("/Customers/Customer/Contact[text()='Li Li']") |
返回结果为:
代码如下 | 复制代码 |
|
4. 返回含有contact名为 Li Li 的customer。注意和3的区别:
代码如下 | 复制代码 |
xmlDoc.selectSingleNode("/Customers/Customer[Contact/text()='Li Li']"); |
5. 如何获取xml、text、以及属性(attribute)
(1) 获取xml: 使用.xml,比如
代码如下 | 复制代码 |
xmlDoc.selectSingleNode("/Customers/Customer/Contact[text()='Li Li']").xml |
结果为:
代码如下 | 复制代码 |
(2) 获取
代码如下 | 复制代码 |
text:xmlDoc.selectSingleNode("/Customers/Customer/Contact[text()='Li Li']").text |
结果为: Li Li
(3) 获取属性使用 getAttribute 方法:
代码如下 | 复制代码 |
xmlDoc.selectSingleNode("/Customers/Customer/Contact[text()='Li Li']").getAttribute(“gender”) |
最后看一个完整的实例
代码如下 | 复制代码 |
< script language = " JavaScript " > |
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22