前几天写的关于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);
 }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|