有关对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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值