您的位置:首页 > 其它

有关对webservice返回的XML文档的改进

2007-08-09 14:04 477 查看
前几天写的关于post方法调用webservice的改进.突然发现有问题,当webservice返回的XML文档有多级子节点时,存入iframe中的InnerText中会有很多减号....,这样一来,再用loadXML方法加载这个innerText时...就出错了.(减号是XML文档自动生成的,但放到innerText中就变成了一个字符了,设想下一个即将要载入的XML字符串中有很多这样的减号,能是一个规范的XML文档吗?不知道大家有没有理解我要表达的意思....)反正就是要把减号去掉....


function getxmlmsg()




...{


alert(xmlfile.document.body.innerText);


var str=xmlfile.document.body.innerText;


str=str.split("-").join("");//去掉减号


alert(str);


var xmldoc=new ActiveXObject("Microsoft.XMLDOM");


xmldoc.async="false";


xmldoc.loadXML(str);


//var msg=xmldoc.documentElement.childNodes.item(0).text;


//alert(msg);


//alert(xmldoc.xml);


var msg=xmldoc.childNodes[1].childNodes[1].childNodes[0].childNodes[0].text;


alert(msg);


}

或者采用一种更智能的办法,因为返回的XML文档你只想要它的关键的部分.然后我们可以把那个关键的部分提取出来,自己新建一个节点,把提取出来的东西放再新建的节点里构成一个新的XML文档.


//Creat XMLDOM Instance


function CreateXMLDOM()




...{




//Build a string Array


var arrSignatures = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",


"MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",


"Microsoft.XmlDom"];




//Circle the Array until creat the XMLDOM Instence




for (var i=0; i < arrSignatures.length; i++) ...{




try ...{




var oXmlDom = new ActiveXObject(arrSignatures[i]);




return oXmlDom;






} catch (oError) ...{


//on Error ignore


}


}




throw new Error("You system have not MSXML");


}






//Dom Instance load XML format String,and trans to XmlDom Instance


function CreatStrDom(str,bstr,estr)




...{




var doc=CreateXMLDOM(); //Creat the Null XMLDOM




str = str.split(" ").join(""); //delete newline sign and enter sign




str = str.split(" ").join(""); //delete space




str = str.slice(str.indexOf(bstr),str.indexOf(estr)); //intercept a part of the str,截取想要的部分




str = "<root>"+str+"</root>"; //add the string root node,新建一个节点,把截取的部分放入这个节点




doc.async=false; //set async is false




doc.loadXML(str); //load the string to build to a XMLDOM Instance (if wanna load a XML file,should use Function "load( [file address string] )" but "loadXML( [string] )" ),导入新的XML字符串,而不是那个innerText中的东东了




return doc; //return doc instance




}




function getxml1()




...{


var str1 = xmlfile.document.body.innerText;


var tag='<NewDataSet xmlns="">';


alert(str1);


str1=str1.slice(str1.indexOf('<NewDataSet xmlns="">')+tag.length,str1.indexOf("</NewDataSet>"))//取<NewDataSet>...</NewDataSet>中间的东东


alert(str1);


//var xmldoc = CreatStrDom(str1,'-<NewDataSet xmlns="">','</NewDataSet>');


//alert(xmldoc.xml);


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: