在使用AJAX时,虽然JSON数据格式简单易用,但是服务器端语言对JSON的支持并不如XML完善,有时候我们需要从后台向前台返回XML数据格式,所以学会javascript怎样利用DOM操作XML是非常有必要的
以下为JS利用DOM操作XML的代码
1、对XML文档的装载
- function loadXMLDocument(flag,xmlDoc){//flag=true代表XML文档,否则是XML字符串
- //IE浏览器的装载方法
- if(window.ActiveXObject){
- var activeName=['MSXML2.DOMDocument','Microsoft.XmlDom'];
- var xmlObj;
- for(var i=0;i<activeName.length;i++){
- try{
- xmlObj=new ActiveXObject(activeName[i]);
- break;
- }catch(e){
- }
- }
- //对象创建成功
- if(xmlObj){
- //以同步方式装载XML文档
- xmlObj.async=false;
- //装载xml文档
- if(flag){
- xmlObj.load(xmlDoc);
- }else{//装载xml字符串
- xmlObj.loadXML(xmlDoc);
- }
- //返回根节点对象
- //return xmlObj;
- //返回根元素对象
- return xmlObj.documentElement;
- }else{//对象创建失败
- alert("XMLDocumnet对象创建失败");
- return null;
- }
- //FireFox浏览器的装载方法
- }else if(document.implementation.createDocument){
- var xmlObj;
- if(flag){//装载xml文档
- xmlObj=document.implementation.createDocument("","",null);
- if(xmlObj){
- xmlObj.async=false;
- xmlObj.load(xmlDoc);
- return xmlObj
- //return xmlObj.documentElement;
- }else{
- alert("创建对象失败");
- return null;
- }
- }else{//装载xml字符串
- xmlObj=new DOMParser();
- var docRoot=xmlObj.parseFromString(xmlDoc,'text/xml');
- return docRoot.documentElement;
- }
- }else{
- alert("XMLDocumnet对象创建失败");
- return null;
- }
- }
function loadXMLDocument(flag,xmlDoc){//flag=true代表XML文档,否则是XML字符串
//IE浏览器的装载方法
if(window.ActiveXObject){
var activeName=['MSXML2.DOMDocument','Microsoft.XmlDom'];
var xmlObj;
for(var i=0;i<activeName.length;i++){
try{
xmlObj=new ActiveXObject(activeName[i]);
break;
}catch(e){
}
}
//对象创建成功
if(xmlObj){
//以同步方式装载XML文档
xmlObj.async=false;
//装载xml文档
if(flag){
xmlObj.load(xmlDoc);
}else{//装载xml字符串
xmlObj.loadXML(xmlDoc);
}
//返回根节点对象
//return xmlObj;
//返回根元素对象
return xmlObj.documentElement;
}else{//对象创建失败
alert("XMLDocumnet对象创建失败");
return null;
}
//FireFox浏览器的装载方法
}else if(document.implementation.createDocument){
var xmlObj;
if(flag){//装载xml文档
xmlObj=document.implementation.createDocument("","",null);
if(xmlObj){
xmlObj.async=false;
xmlObj.load(xmlDoc);
return xmlObj
//return xmlObj.documentElement;
}else{
alert("创建对象失败");
return null;
}
}else{//装载xml字符串
xmlObj=new DOMParser();
var docRoot=xmlObj.parseFromString(xmlDoc,'text/xml');
return docRoot.documentElement;
}
}else{
alert("XMLDocumnet对象创建失败");
return null;
}
}
2、XML文档装载完成之后,剩下的就是如何利用XPATH技术获取XML中的内容了,在这里通常会用到两个方法:selectNodes()和selectSingleNode()
2.1 selectSingleNode()方法
- function selectSingleNode(xmlDom,sXpath){
- if(window.ActiveXObject){//IE浏览器
- return xmlDom.selectSingleNode(sXpath);
- }else if(window.XPathEvaluator){//firefox类浏览器
- var xpathObj=new XPathEvaluator();
- if(xpathObj){
- var result=xpathObj.evaluate(sXpath,xmlDom,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
- return result.singleNodeValue;
- }else{
- return null;
- }
- }else{
- return null;
- }
- }
function selectSingleNode(xmlDom,sXpath){
if(window.ActiveXObject){//IE浏览器
return xmlDom.selectSingleNode(sXpath);
}else if(window.XPathEvaluator){//firefox类浏览器
var xpathObj=new XPathEvaluator();
if(xpathObj){
var result=xpathObj.evaluate(sXpath,xmlDom,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
return result.singleNodeValue;
}else{
return null;
}
}else{
return null;
}
}
2.2 selectNodes()方法
- function selectNodes(xmlDom,sXpath){
- if(window.ActiveXObject){//IE浏览器
- return xmlDom.selectNodes(sXpath);
- }else if(window.XPathEvaluator){//firefox类浏览器
- var xpathObj=new XPathEvaluator();
- if(xpathObj){
- var result=xpathObj.evaluate(sXpath,xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
- var nodes=new Array();
- var node;
- while((node=result.iterateNext())!=null){
- nodes.push(node);
- }
- return nodes;
- }else{
- return null;
- }
- }else{
- return null;
- }
- }
function selectNodes(xmlDom,sXpath){
if(window.ActiveXObject){//IE浏览器
return xmlDom.selectNodes(sXpath);
}else if(window.XPathEvaluator){//firefox类浏览器
var xpathObj=new XPathEvaluator();
if(xpathObj){
var result=xpathObj.evaluate(sXpath,xmlDom,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
var nodes=new Array();
var node;
while((node=result.iterateNext())!=null){
nodes.push(node);
}
return nodes;
}else{
return null;
}
}else{
return null;
}
}
关于XPATH的技术细节大家可以从网上找到很多相关资料,JS和服务器端语言对XPATH技术的支持都是非常好的。在这里就不赘述了。
希望这篇文章能对学习AJAX的孩纸们有帮助