加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 02:49:15 所属栏目:安全 来源:网络整理
导读:前几天写的关于post方法调用webservice的改进.突然发现有问题,当webservice返回的XML文档有多级子节点时,存入iframe中的InnerText中会有很多减号....,这样一来,再用loadXML方法加载这个innerText时...就出错了.(减号是XML文档自动生成的,但放到innerText中就
前几天写的关于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);

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读