有关对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);
}
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);
}
相关文章推荐
- 我用vs2005写了一个webservice用来查询sql2005数据库中表值,返回一个dataset类型集合,测试时候显示的xml文档没有问题,但是当我添加web引用的时候却无法正常显示而且报错原因之一。
- HttpWebRequest 调用 WebService 返回 xml
- 关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
- Java访问WebService返回XML数据的方法
- asp.net WebService 返回不带标记xml标记的字符串
- js操作 因包含null值列的DataSet 所返回的"列丢失"的xml文档
- 关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
- 遍历XML文档返回二维数组(ASP)(更新版)
- android webservice通过soap协议返回XML,如何解析XML
- WebService返回xml,转换成Array,绑定DataGrid
- axis调用webservice 返回xml解析
- 通过Web服务外置XML,将Web服务用作数据源,Web服务传递的内容是XML,将由Web服务返回的XML文档,以便可以将它加载到客户机上的XML分析器。
- WebService返回xml,转换成Array,绑定DataGrid
- XmlHttp返回的XML文档
- Java访问WebService返回xml数据
- VB调用WebService(直接Post方式)并解析返回的XML
- JS调用Webservice并读取返回XML内容
- java调用webservice天气预报(SOAP请求的方式获取天气信息并解析返回的XML)
- JQuery调用webservice,返回的json数据和XML数据的处理方法
- MyGeneration学习笔记(9) :在WebService使用dOOdad时,对ToXml/FromXml的一点改进