首页 > js学习 > js基础知识 > XML中用XPath方式查找节点的兼容
2016
12-16

XML中用XPath方式查找节点的兼容

如果要做W3C和IE的跨浏览器兼容,我们要思考几个问题:

1.如果传递一个节点的下标,IE是从0开始计算,W3C从1开始计算,可以通过传递获取下标进行增1减1的操作来进行。

2.独有的功能放弃,为了保证跨浏览器。

3.只获取单一节点和节点列表即可,基本可以完成所有的操作。

跨浏览器获取单一节点

function selectSingleNode(xmlDom, xpath) {

var node = null;

if (typeof xmlDom.evaluate != 'undefined') {

var patten = /\[(\d+)\]/g;

var flag = xpath.match(patten);

var num = 0;

if (flag !== null) {

num = parseInt(RegExp.$1) + 1;

xpath = xpath.replace(patten, '[' + num + ']');

}

var result = xmlDom.evaluate(xpath, xmlDom, null,

XPathResult.FIRST_ORDERED_NODE_TYPE, null);

if (result !== null) {

node = result.singleNodeValue;

}

} else if (typeof xmlDom.selectSingleNode != 'undefined') {

node = xmlDom.selectSingleNode(xpath);

}

return node;

}

跨浏览器获取节点集合

function selectNodes(xmlDom, xpath) {

var nodes = [];

if (typeof xmlDom.evaluate != 'undefined') {

var patten = /\[(\d+)\]/g;

var flag = xpath.match(patten);

var num = 0;

if (flag !== null) {

num = parseInt(RegExp.$1) + 1;

xpath = xpath.replace(patten, '[' + num + ']');

}

var node = null;

var result = xmlDom.evaluate('root/user', xmlDom, null,

XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

if (result !== null) {

while ((node = result.iterateNext()) !== null) {

nodes.push(node);

}

}

} else if (typeof xmlDom.selectNodes != 'undefined') {

nodes = xmlDom.selectNodes(xpath);

}

return nodes;

}

在传递xpath路径时,没有做验证判断是否合法,可以另行编写

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。