微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

前几天写的关于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);

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐