javascript解析返回的xml各式的字符串

<script>

var flags ;
  if(window.XMLHttpRequest) { 
   XMLHttpReq = new XMLHttpRequest(); //firefox下执行此语句
   }
   else if(window.ActiveXObject) {
    try{
    XMLHttpReq = new ActiveXObject("Msxm12.XMLHTTP");
    }catch(e){
     try{
     XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
     }catch(e) {}
    }
   }
   XMLHttpReq.open("post","getDate.jsp",false);
   XMLHttpReq.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded;charset=UTF-8");
   XMLHttpReq.onreadystatechange = function () {
   var statePending = XMLHttpReq.readyState;
   if (statePending == 4&& XMLHttpReq.status==200)
   {
    if(window.ActiveXObject){
     xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
     xmlDoc.async = false;
     xmlDoc.loadXML(XMLHttpReq.responseText.replace(/(^/s*)/g, ""));
    } else if (document.implementation&&document.implementation.createDocument){
     XMLHttpReq.open("GET",XMLHttpReq.responseText.replace(/(^/s*)/g, ""),false);
     XMLHttpReq.send(null);
     xmlDoc = XMLHttpReq.responseXML;
     //return new XMLSerializer().serializeToString(xmlDoc);
    }
    flags = xmlDoc.getElementsByTagName("content");
   }
   }
   XMLHttpReq.send(null);
   for(var i =0;i<flags.length;i++)
   {
   var content = flags[i]; //得一个content结点
   var ctid = content.getElementsByTagName("ct_id")[0].firstChild.data; //取结点里的数据
   var ctday = content.getElementsByTagName("ct_day")[0].firstChild.data;
   var cttitle = content.getElementsByTagName("ct_title")[0].firstChild.data;
   //this.Days[ctday].innerHTML = "<a href='display.jsp?ct_id="+ctid+"' target='_blank' style='color:red' title='"+cttitle+"'>" + ctday+ "</a>";
   } 
</script>

 

getDate.jsp

<%

  StringBuffer responsexml = new StringBuffer();
  responsexml.append("<?xml version=/"1.0/" encoding=/"GBK/"?><list>");

 responsexml.append("<content><ct_day>"+HAVE_DATE+"</ct_day><ct_id>"+ct_id+"</ct_id><ct_title>"+ct_title+"</ct_title></content>");

out.print(responsexml+"</list>");

%>

 

兼容所有浏览器加载xml文件的代码http://www.sharejs.com/showdetails-636.aspx
简介:js操作xml文件的一个很严重的问题是浏览器的兼容性,SoftXMLLib脚本库的目的就是在不同的浏览器中创建XMLHTTP 和 XMLDOM 对象,脚本库包含了最基本函数和属性,Microsoft.XMLDOM ActiveXObject对象里面有的功能,在这个库里都有

var ajaxObj=null;
var xmlDOMObj=null;
 
function createAjaxObject(){
  if(window.XMLHttpRequest){
    try {
      ajaxObj = new XMLHttpRequest();
    }
    catch(e) {
      alert("Problem creating AJAX!");
    }
  }
  else {
    try {
      ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(e) {
      alert("Problem creating AJAX!");
    } 
  }
  return ajaxObj;
}

window.onerror = errorHandler;

function errorHandler(message, url, line) {
  alert("Error loading file!");
  return true;
}

var doc;

function load(xmlfile) {
  if (document.implementation && document.implementation.createDocument) {
    xmlDOMObj = document.implementation.createDocument("", "", null);
    xmlDOMObj.async=false;
  } else if (window.ActiveXObject) {
    xmlDOMObj = new ActiveXObject("Microsoft.XMLDOM");
    xmlDOMObj.async=false;
  } else {
    alert('Your browser can/'t handle this script');
    return;
  }
  l=xmlDOMObj.load(xmlfile);
  if(!l) {
    this.loadError = 1;
  } else {
    SoftXMLLib.prototype.documentElement = xmlDOMObj.documentElement;
  }
}
 
function loadXML(xmlString){
  if (document.implementation && document.implementation.createDocument) {
    var parser = new DOMParser();
    try {
      var doc = parser.parseFromString(xmlString, "text/xml");
    }
    catch(e){alert("XML file is not valid!");}; 
    if(doc.documentElement.nodeName=="parsererror") {
      this.loadXMLError = 1;
    } else {
      SoftXMLLib.prototype.DOM = doc;
      SoftXMLLib.prototype.documentElement = doc.documentElement;
    }
  } else if (window.ActiveXObject) {
    xmlDOMObj = new ActiveXObject("Microsoft.XMLDOM");
    xmlDOMObj.async=false;
    l = xmlDOMObj.loadXML(xmlString);
    if(!l){
      this.loadXMLError = 1;
  } else {
    SoftXMLLib.prototype.DOM = xmlDOMObj;
    SoftXMLLib.prototype.documentElement = xmlDOMObj.documentElement;
  }
  } else {
    alert('Your browser can/'t handle this script');
    return;
  }
}
 
function selectNodes(xpath){
  var selectedNodes = new Array();
  doc = this.documentElement;
  if(doc==null){
    alert("Error loading file!");
    return;
  }
   
  if(document.all){
    var cxpath = new String(xpath).toLowerCase();
    f = doc.selectNodes(xpath);
    for(var i=0;i<f.length;i++) {
      var elemattr="";
      var curAttributes = f[i].attributes;
      if(curAttributes.length>0) {
        for(y=0;y<curAttributes.length;y++) {
          if(y<curAttributes.length-1) {
            var dt=",";
          } else {
            var dt="";
        }
        elemattr+=curAttributes[y].nodeName + ":/"" + curAttributes[y].nodeValue + "/"" + dt;
      }
    }
    var t = eval("[{" + elemattr + "}]");
    if(f[i].parentNode.nodeName == this.documentElement.nodeName){
      this.self = f[i];
    } else {
      this.self = f[i].parentNode;
    }
    selectedNodes[selectedNodes.length] = {innerText:f[i].text,attributes:t,self:this.self};
  }
  return selectedNodes;
  } else {
    if(navigator.userAgent.indexOf("Firefox")!=-1){
      var versionindex=navigator.userAgent.indexOf("Firefox")+8
      if (parseInt(navigator.userAgent.charAt(versionindex))>=1)
      var xpe = new XPathEvaluator();
      var nsResolver = xpe.createNSResolver(doc.ownerDocument.documentElement);
      var headings = xpe.evaluate(xpath, doc, nsResolver, 0, null);
  } else {
     var headings = document.evaluate(xpath, doc, null, XPathResult.ANY_TYPE,null);
  }
  var thisHeading = headings.iterateNext();
  while (thisHeading) {
    var elemattr="";
    var curAttributes = thisHeading.attributes;
    if(curAttributes.length>0) {
      for(var i=0;i<curAttributes.length;i++) {
        if(i<curAttributes.length-1) {
          var dt=",";
        } else {
          var dt="";
        }
      elemattr+=thisHeading.attributes[i].nodeName + ":/"" + thisHeading.attributes[i].nodeValue + "/"" + dt;
    }
  } 
  var t = eval("[{" + elemattr + "}]");
    if(thisHeading.parentNode.nodeName == this.documentElement.nodeName) {
      this.self = thisHeading;
    } else {
      this.self = thisHeading.parentNode;
    }
    selectedNodes[selectedNodes.length] = {innerText:thisHeading.textContent,attributes:t,self:this.self};
    thisHeading = headings.iterateNext();
    }
    return selectedNodes;
  };
}
 
function Decode(str) {
  var decoded = "";
  var curStr = new String(str);
  var spl = curStr.split(",");
  for(var i=0;i<spl.length;i++) {
    decoded+=String.fromCharCode(spl[i])
  }
  return decoded;
}

function Encode(str){
  var encoded = "";
  var curStr = new String(str);
  for(var i=0;i<curStr.length;i++){
    if(i<curStr.length-1){
      var dt=",";
    } else {
      var dt="";
    }
    encoded+=curStr.charCodeAt(i) + dt;
  }
  return encoded;
}
 
function SoftXMLLib(){
  this.createAjaxObject = createAjaxObject;
  this.loadXMLError = 0;
  this.loadError = 0;
  this.load = load;
  this.selectNodes = selectNodes;
  this.loadXML = loadXML;
  this.self = null;
  this.Decode = Decode;
  this.Encode = Encode;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值