码迷,mamicode.com
首页 > 其他好文 > 详细

W3C的XPath

时间:2017-09-21 18:08:58      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:catch   version   方式   dev   div   res   eee   type   cti   

//跨浏览器返回XMLDOM对象
function getXMLDOM(xmlStr){
var xmlDom=null;
if(typeof window.DOMParser !=‘undefined‘){
xmlDom=(new DOMParser).parseFromString(xmlStr,‘text/xml‘);
var errors=xmlDom.getElementsByTagName(‘parsererror‘);
if(errors.length>0){
throw new Error(‘错误信息:‘+errors[0].textContent);
}
}else if(typeof window.ActiveXObject){
var version=[
‘MSXML2.DOMDocument6.0‘,
‘MSXML2.DOMDocument3.0‘,
‘MSXML2.DOMDocument‘,
];
for(var i=0;i<version.length;i++){
try{
var xmlDom=new ActiveXObject(version[i]);
}catch(e){
//跳过
}
}
xmlDom.loadXML(xmlStr);
if(xmlDom.parseError!=0){
throw new Error(‘错误信息:‘+xmlDom.parseError.reason);
};
return xmlDom;
}else{
throw new Error("您的系统或浏览器不支持XML DOM对象!");
};
return xmlDom;
}
//序列化XML
function serializerXML(xmlDom){
var xml=‘‘;
if(typeof window.XMLSerializer!=‘undefined‘){
xml=(new XMLSerializer()).serializeToString(xmlDom);
}else if(typeof xmlDom.xml!=‘undefined‘){
xml=xmlDom.xml;
}
return xml;
}
var xmlStr=‘<root><user id="5">Leee</user><user id="6">Koko</user></root>‘;
var xmlDom=getXMLDOM(xmlStr);
// alert(xmlDom.xml); //只有IE支持此序列化
// alert(serializerXML(xmlDom));
//PS: 为了跨域所有浏览器兼容,我们放弃了从外部加载XML文件,而使用字符串XML加载和序列化


//两种方式创建XPathResult
//单一节点,W3C的XPath下标是从1开始的
// var eva=new XPathEvaluator();
// alert(eva); //[object XPathEvaluator]
// var result=eva.evaluate(‘root/user[1]‘,xmlDom,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
// alert(result); //[object XPathResult]
// if(result!==null){
// alert(serializerXML(result.singleNodeValue));
// }

// 第二种方法
// var result=xmlDom.evaluate(‘root/user[1]‘,xmlDom,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
// if(result!==null){
// alert(serializerXML(result.singleNodeValue));
// }



//节点集合
var result=xmlDom.evaluate(‘root/user‘,xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
// alert(serializerXML(result.iterateNext()))
if(result!=null){
var nodes=[];
var node=result.iterateNext();
while(node!==null){
nodes.push(node);
node=result.iterateNext();
}
}

alert(serializerXML(nodes[0]));
alert(serializerXML(nodes[1]));

W3C的XPath

标签:catch   version   方式   dev   div   res   eee   type   cti   

原文地址:http://www.cnblogs.com/gengxinnihaoma/p/7569320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!