//跨瀏覽器返回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]));