您的位置:首页 > Web前端 > JavaScript

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

2010-01-07 14:08 561 查看
<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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: