W3C的XPath
Posted 耿鑫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了W3C的XPath相关的知识,希望对你有一定的参考价值。
//跨浏览器返回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的主要内容,如果未能解决你的问题,请参考以下文章